だいたいのレンタルサーバではPHPが使えます。
ワードプレスもPHPで作られていますね。
htmlに埋め込んでつかうこともできてPHPは便利ですよ。htmlの中にPHPで書かれたプログラムを埋め込むことによって、お客様が訪れるたびに違うページを表示させることができたり、人によって表示内容を変えたりということが簡単にできます。
さて、この記事では、PHPで簡単にログをファイルに保存する方法を解説します。ログ(アクセスやプログラムの動作などの記録)をファイルに残すことにより、ちゃんとプログラムが動いているかとか、どんなアクセスをされているかを確認することができます。
PHPで簡単にログをファイルに書き出す方法
簡単にログを残すには、error_log()という関数を使います。ウェブサイトは同時にアクセスされることがあり、そういった同時アクセスで問題が起きないようにファイルに記録するのは大変なのですが、この関数を使えば、ファイルのロックを適切に行なってくれます。
error_log()の使い方
PHPのマニュアルサイトによると、
1 2 |
bool error_log (string $message[, int $message_type = 0[, string $destination [, string $extra_headers ]]] ) |
と書いています。[] のなかは省略可能で、更に=0 のように代入してあるものは、省略したときの値(デフォルト値)を意味します。
で、この関数ですが、$messageには、記録するエラーメッセージを入れます。
ログファイルに書き出すためには、$message_type = 3 を指定します。その時、$destination にはファイル名を指定します。
$message_type にはエラーメッセージをどこに出力するかを指定するオプションで、他にもメールで送信することもできます。
$message_typeは次の表の分を抑えておけば良いでしょう。
message_type | 意味 |
---|---|
0(default) |
PHPのシステム・ロガーに送られます。 私が実験した環境では(CentOS)、 |
1 | destination で指定したアドレスへメールで出力が送られます。 |
3 | destinationで指定されたファイルにアペンド(追加)されます。改行は追加されないので”\n”を付ける必要があります。 |
動作例
message_type = 0 のとき
1 |
error_log("error log test. output to default(0)\n"); |
ブラウザ経由で実行した結果:
apacheログファイルへ出力されました。
1 2 3 4 5 6 |
[root@localhost php_logtest]# cat /var/log/httpd/error_log [Sun Jun 03 15:21:47 2018] [error] [client 192.168.33.1] error log test. output to default(0)\n [Sun Jun 03 15:23:01 2018] [error] [client 192.168.33.1] error log test. output to default(0)\n [Sun Jun 03 15:24:56 2018] [error] [client 192.168.33.1] error log test. output to default(0)\n [Sun Jun 03 15:25:05 2018] [error] [client 192.168.33.1] client denied by server configuration: /var/www/html/php_logtest/test.log [Sun Jun 03 15:28:12 2018] [error] [client 192.168.33.1] error log test. output to default(0)\n |
コマンドライン経由で実行した結果:
標準エラーへ出力されました。
1 2 3 4 |
[root@localhost php_logtest]# php test.php 2> error_out.txt [root@localhost php_logtest]# cat error_out.txt error log test. output to default(0) |
message_type = 1 のとき(メール)
1 |
error_log("error log test. output to mail\n",1,"xxxxx@gmail.com"); //メールアドレス指定 |
結果:
メールでメッセージを受信。
message_type = 2のとき(ファイルへ出力)
1 |
error_log("error log test. output to file(test.log)\n",3,"./test.log"); |
結果:
ファイルに出力されました。
1 2 3 |
[root@localhost php_logtest]# cat test.log error log test. output to file(test.log) [root@localhost php_logtest]# |
注意点:ブラウザ上で実行したときのファイルのアクセス設定
ログファイルをphpファイルと同じディレクトリに作る場合、アクセス制限をかけておかないと、誰からも閲覧できてしまいます。
.htaccess でログファイルにアクセス制限をかけるようにしましょう。
アクセス制限をかけない場合、誰でもログファイル閲覧が可能
例えば、test.log という名前のファイルにログ出力した場合、アクセス制限をしないと以下のようにファイルの中身がブラウザから見れてしまいます。
アクセス制限のかけ方
ログ出力用のファイルと同じディレクトリに、.htaccess というファイルを作って特定ファイルへブラウザからアクセスできないようにします。
.htaccess のファイルの中身は以下のとおりです。
cat .htaccess というのは、.htaccess ファイルを表示するという Linuxのコマンドで、実際のファイルの内容は2行目の「<Files ・・・」からとなっています。
1 2 3 4 |
[root@localhost php_logtest]# cat .htaccess <Files ~ "^test\.log$"> Deny from all </Files> |
上記の場合、test.log というファイルだけ、アクセス禁止にしています。
Filesダグの中の「^」はファイル名の先頭、「$」は末尾を意味します。
もし、これらを付けない場合、「aaatest.logbbb」 などファイル名の先頭と末尾に他の文字列が含まれているファイルも、アクセス制限の対象になります。
アクセス制限をかけたあとのブラウザでの閲覧結果:
下図のように、ちゃんとアクセスが禁止されてます。
まとめ
PHPコードから動作やアクセスの確認をしたい場合、error_log()関数を使うと便利です。
ファイルへ出力する場合、同時アクセスによる排他処理などは関数内でやってくれるため、ロック処理などを別途考えなくても、ちゃんと記録してくれます。
ぜひ、ご活用ください。
コメント
[…] PHPでログをファイルに書き出すのはerror_log()が便利 […]
[…] PHPでログをファイルに書き出すのはerror_log()が便利 […]
[…] PHPでログをファイルに書き出すのはerror_log()が便利 […]
[…] PHPでログをファイルに書き出すのはerror_log()が便利 […]