PHPでログをファイルに書き出すのはerror_log()が便利

ウェブページ作成
この記事は約5分で読めます。
スポンサーリンク

だいたいのレンタルサーバではPHPが使えます。
ワードプレスもPHPで作られていますね。
htmlに埋め込んでつかうこともできてPHPは便利ですよ。htmlの中にPHPで書かれたプログラムを埋め込むことによって、お客様が訪れるたびに違うページを表示させることができたり、人によって表示内容を変えたりということが簡単にできます。

 

さて、この記事では、PHPで簡単にログをファイルに保存する方法を解説します。ログ(アクセスやプログラムの動作などの記録)をファイルに残すことにより、ちゃんとプログラムが動いているかとか、どんなアクセスをされているかを確認することができます。

PHPで簡単にログをファイルに書き出す方法

簡単にログを残すには、error_log()という関数を使います。ウェブサイトは同時にアクセスされることがあり、そういった同時アクセスで問題が起きないようにファイルに記録するのは大変なのですが、この関数を使えば、ファイルのロックを適切に行なってくれます。

error_log()の使い方

PHPのマニュアルサイトによると、

と書いています。[] のなかは省略可能で、更に=0 のように代入してあるものは、省略したときの値(デフォルト値)を意味します。

で、この関数ですが、$messageには、記録するエラーメッセージを入れます。

ログファイルに書き出すためには、$message_type = 3 を指定します。その時、$destination にはファイル名を指定します。

$message_type にはエラーメッセージをどこに出力するかを指定するオプションで、他にもメールで送信することもできます。

$message_typeは次の表の分を抑えておけば良いでしょう。

message_type 意味
0(default)

PHPのシステム・ロガーに送られます。
message_typeを省略したときの既定値になってます。

私が実験した環境では(CentOS)、
php としてコマンドラインで実行したときは標準エラー出力へ、
サーバーをapacheでブラウザ経由で実行したときはapacheのエラーログファイル(例:/var/log/httpd/error_log)に出力されました。

1 destination で指定したアドレスへメールで出力が送られます。
3 destinationで指定されたファイルにアペンド(追加)されます。改行は追加されないので”\n”を付ける必要があります。
   

動作例

message_type = 0 のとき

ブラウザ経由で実行した結果:
apacheログファイルへ出力されました。

コマンドライン経由で実行した結果:
標準エラーへ出力されました。

message_type = 1 のとき(メール)

結果:
メールでメッセージを受信。

message_type = 2のとき(ファイルへ出力)

結果:

ファイルに出力されました。

注意点:ブラウザ上で実行したときのファイルのアクセス設定

ログファイルをphpファイルと同じディレクトリに作る場合、アクセス制限をかけておかないと、誰からも閲覧できてしまいます。

.htaccess でログファイルにアクセス制限をかけるようにしましょう。

アクセス制限をかけない場合、誰でもログファイル閲覧が可能

例えば、test.log という名前のファイルにログ出力した場合、アクセス制限をしないと以下のようにファイルの中身がブラウザから見れてしまいます。

アクセス制限のかけ方

ログ出力用のファイルと同じディレクトリに、.htaccess というファイルを作って特定ファイルへブラウザからアクセスできないようにします。

.htaccess のファイルの中身は以下のとおりです。

cat .htaccess というのは、.htaccess ファイルを表示するという Linuxのコマンドで、実際のファイルの内容は2行目の「<Files ・・・」からとなっています。

 上記の場合、test.log というファイルだけ、アクセス禁止にしています。

Filesダグの中の「^」はファイル名の先頭、「$」は末尾を意味します。
もし、これらを付けない場合、「aaatest.logbbb」 などファイル名の先頭と末尾に他の文字列が含まれているファイルも、アクセス制限の対象になります。

アクセス制限をかけたあとのブラウザでの閲覧結果:

下図のように、ちゃんとアクセスが禁止されてます。

まとめ

PHPコードから動作やアクセスの確認をしたい場合、error_log()関数を使うと便利です。

ファイルへ出力する場合、同時アクセスによる排他処理などは関数内でやってくれるため、ロック処理などを別途考えなくても、ちゃんと記録してくれます。

ぜひ、ご活用ください。

 

 

この記事が気に入ったら
いいね ! しよう

コメント

  1. […] PHPでログをファイルに書き出すのはerror_log()が便利 […]

  2. […] PHPでログをファイルに書き出すのはerror_log()が便利 […]

  3. […] PHPでログをファイルに書き出すのはerror_log()が便利 […]

  4. […] PHPでログをファイルに書き出すのはerror_log()が便利 […]