ペチパーノート

WEB開発系Tipsブログです。

error_logに配列を出力する

Ajax通信やスマホアプリのAPIPHPで作る場合など、
画面にデバッグ情報を出せない場合があります。
そういう時は、Apacheerror_logにデバッグ情報を出力するのが手っ取り場合です。

test.php

<?php
$weight = 100;
error_log($weight);

error_log

100

この流れで配列を出力してみます。

test.php

<?php
$myself = array(
    'height' => 175,
    'weight' => 100,
    'salary' => 120000,
);
error_log($myself);

error_log

PHP Warning:  error_log() expects parameter 1 to be string

怒られました。こんな時は配列にprint_rをかましてさらに第二引数にtrueです。

test.php

<?php
$myself = array(
    'height' => 175,
    'weight' => 100,
    'salary' => 120000,
);
error_log(print_r($myself, true));

error_log

Array\n(\n    [height] => 175\n    [weight] => 100\n    [salary] => 120000\n)\n

これでOKです。
テキストエディタで改行コードを置換するとさらに見やすくなります。

Array
(
    [height] => 175
    [weight] => 100
    [salary] => 120000
)

chkconfigでサービスのランレベル確認

# chkconfig --list httpd
httpd           0:off   1:off   2:off   3:on    4:off   5:off   6:off
ランレベル 意味
0 シャットダウン(システムの停止)
1 シングルユーザーモード(rootのみ)
2 ネットワークなしのマルチユーザーモード
3 通常のマルチユーザーモード(テキストモードでの起動)
4 未使用
5 グラフィカルログインによるマルチユーザーモードGUIモードでの起動)
6 システムの再起動

MySQLのデータをn日分バックアップするシェルスクリプト

Cronで1日1回実行すればOK

#!/bin/sh

# バックアップファイルを何日分残しておくか
PERIOD=7
# バックアップファイルを保存するディレクトリ
DIRPATH='/path/to/dir/mysql'

# ファイル名定義
FILENAME="mysqldump"`date +%Y%m%d`

# mysqldump実行
mysqldump --opt -Q -c --host=host -u username -ppassword database > $DIRPATH/$FILENAME.sql

# パーミッション変更
chmod 700 $DIRPATH/$FILENAME.sql

# 古いバックアップファイルを削除
OLDFILE=`date --date "$PERIOD days ago" +%y%m%d`
rm -f $DIRPATH/$OLDFILE.sql

SSH接続したサーバーの待受中ポートを調べる

$ netstat -tlpn
Proto 受信-Q 送信-Q 内部アドレス            外部アドレス            状態       PID/Program name
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -

IPアドレス:ポート

PHPインストールしている拡張モジュールの一覧

$ php -m
[PHP Modules]
apcu
bcmath
calendar
Core
ctype
curl
date
dom
exif
FFI
fileinfo
filter
ftp
gd
gettext
hash
iconv
imap
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
Reflection
session
shmop
SimpleXML
sockets
sodium
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zip
zlib

[Zend Modules]
Zend OPcache

SPFレコードとは?

送信ドメイン認証(SPF)について
これをしないと迷惑メールで弾かれることが多い。

SPFレコードが設定されているかどうかを調べる

$ dig example.jp txt

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-16.P1.el5 <<>> example.jp txt
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4177
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;example.jp.                  IN      TXT

;; ANSWER SECTION:
example.jp.           600     IN      TXT     "v=spf1 +ip4:219.106.254.128/28 ~all"

;; Query time: 47 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Tue Jul 24 10:57:11 2012
;; MSG SIZE  rcvd: 78

引けている

SPFを有効にするにはDNS設定(お名前.comとか)でTXTレコードを追加する。

example.jp TXT "v=spf1 +ip4:182.48.38.83 ~all"

example.jpは182.48.38.83からのメールしか送信しませんよー!という宣言

Awstats導入方法

■ソースダウンロード

# cd /usr/local/src
# wget http://www.bflets.dyndns.org/AWStats66_Jpn.tar.gz
# cp -r AWStats66_Jpn /var/www/sites/example.jp

■Jcode.pmダウンロード(検索エンジン経由アクセスの検索キーワードのデコードで必要)

# wget http://openlab.jp/Jcode/Jcode-2.07.tar.gz
# tar xvzf Jcode-2.07.tar.gz
# cp Jcode-2.07/Jcode.pm /var/www/sites/example.jp/AWStats66_Jpn/wwwroot/cgi-bin

■設定ファイル作成

# cd /var/www/sites/example.jp/AWStats66_Jpn/wwwroot/cgin-bin
# cp awstats.model_jp.conf awstats.example.jp.conf
# vi awstats.example.jp.conf
LogFile="/usr/local/apache2/logs/access_log"
SiteDomain="example.jp"
DirData="./awstats_db"
DirIcons="/AWStats66_Jpn/wwwroot/icon"
DirCgi="/AWStats66_Jpn/wwwroot/cgi-bin"

■結果保存ディレクトリ作成

# mkdir -m 777 awstats_db

■各perl(awredir.pl、awstats.pl、utf8_decode.pl)の先頭行にあるperlへのパスを適宜書き換え

#!/usr/local/bin/perl

■ドキュメントルートにリンク作成

# cd /www/htdocs
# ln -s  /var/www/sites/example.jp/AWStats66_Jpn AWStats66_Jpn

apache設定ファイル変更

# cd /usr/local/apache2/conf/
# vi httpd.conf

apacheからperlを使用できるように

AddHandler cgi-script .cgi 
↓
AddHandler cgi-script .cgi .pl

▼ログフォーマット変更

#CustomLog "logs/access_log" common
CustomLog "logs/access_log" combined
↓
CustomLog "logs/access_log" common
#CustomLog "logs/access_log" combined

apache再起動

# service httpd restart

■cronにawstats更新コマンドを登録

#awstats
0 * * * * cd /www/htdocs/AWStats66_Jpn/wwwroot/cgi-bin; /var/www/sites/example.jp/AWStats66_Jpn/wwwroot/cgi-bin/awstats.pl -config=example.jp -update

■アクセスして確認

http://example.jp/AWStats66_Jpn/wwwroot/cgi-bin/awstats.pl?config=example.jp

※ちなみに下記コマンドで結果の静的htmlが作成できる(アイコンとかでないけど)

cd /www/htdocs/AWStats66_Jpn/wwwroot/cgi-bin; \
/var/www/sites/example.jp/AWStats66_Jpn/wwwroot/cgi-bin/awstats.pl -config=example.jp -output -staticlink > /tmp/awstats.html