[php]error_logが使えない環境でログをとる方法

sxchu_752518stop.jpg

※今日のお話は、最初から最後まで、知っている人にとっては当たり前すぎて困るレベルのお話です。

 phpでは、error_logという関数でログを出すことが出来て、一般にこれはApacheのエラーログに出力されるので、これを使うとなんだか動かないスクリプトの動きを追うことが出来ます。

ところが、一部のレンタルサーバで、PHPは使えるんだけどログを見せていただけない環境が存在します。全部見せてくれない環境はさすがに少ないですけど、例えばサブドメインを使っていると駄目とか、共用SSLを使っていると駄目とか。
こういう場合に、しょうがないので自前ログを用意する手順。

1.絶対パスを確認

ログを書き出す場所を決めるために、まずはディレクトリ構成を知る必要があります。
log.phpとか適当な名前のファイルに、こういうスクリプトを書いて走らせてみればだいたい分かります。

<?php
echo "cwd:".getcwd();
?>

「/home/mogya/public_html/」的なものが得られるはず。これだったら、/home/mogya/debug_log あたりにログを出力するようにすれば良さそうですね。

2.ログ出力関数

<?php
function dbg_log($str){
$filepath = "/home/mogya/debug_log";
$fp = fopen($filepath, "a+");
fputs( $fp, $str."\n" );
fclose($fp);
}
?>

ログを出力したいファイルの頭あたりにこんなのを書いておいて、error_log()の代わりにdbg_log()を書けば、変数の中身なり何なりを出力して動きを追うことが出来る。
環境によっては/home/mogya/debug_log に書き込めないことがあり得るので、その場合はFTPで適当なファイルをあげておいて、アクセス権を777にしてしまえば書き込めるようになる。

PHPでファイルに文字を書くだけなんだから当たり前の話なんだけど、毎回思い出すのが面倒なので書いてみた。
セキュリティとか深刻に考えたスクリプトじゃないので、終わったら消すことが前提です。