記事内にはプロモーションが含まれています

【PHP】エラーログの出力や設定の方法、出力先確認、配列の保存

【PHP】エラーログの出力や設定の方法、出力先確認、配列の保存 PHP

Webアプリケーション開発において、バグの原因特定や動作確認のために「エラーログ」は欠かせない存在です。

画面にエラーを表示するだけでは、本番環境でユーザーに不具合を見せてしまうことになりますし、深刻なエラーは画面が真っ白になってしまうこともあります。

PHPには標準でエラーログを出力する機能が備わっていますが、「ログファイルはどこにあるの?」「配列の中身をログに残したいけれど、うまくいかない」といった疑問を持つ方も多いのではないでしょうか。

そこでこの記事では、PHPの error_log 関数を使った基本的なログ出力の方法から、出力先の設定確認、配列やオブジェクトをログに記録するテクニック、さらにはログが出力されない時の対処法までを徹底的に解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

PHPでエラーログを出力する基本 error_log 関数

PHPで任意のメッセージをエラーログに書き込むには、標準関数の error_log を使用するのが最も簡単で確実な方法です。

まずはこの関数の基本的な使い方を押さえておきましょう。

error_log の基本的な書き方

error_log 関数は、第一引数に保存したいメッセージを指定するだけで利用できます。

<?php
// 単純なテキストメッセージをログに出力する
error_log("これはテスト用のエラーログです。処理がここを通りました。");

// 変数の値を含めて出力する
$user_id = 12345;
error_log("ユーザーID: " . $user_id . " の処理を開始しました。");
?>

上記のコードを実行すると、PHPの設定ファイル(php.ini)で指定されたログファイルにメッセージが追記されます。

これにより、プログラムが意図した通りに動いているか、どこで止まってしまったかを確認する手がかりが得られます。

ログファイルへの直接出力(ファイル指定)

デフォルトのログファイル以外に、特定のファイルへログを出力したい場合もあります。

その際は、第二引数に 3 を指定し、第三引数にファイルパスを記述します。

<?php
$message = "独自のログファイルに出力します。";
$log_file = "/var/log/php/my_app_debug.log";

// メッセージタイプ 3 を指定してファイルパスへ出力
error_log($message . "\n", 3, $log_file);
?>

ここで注意すべき点は、改行コード \n を自分で付ける必要があることです。

デフォルトのログ出力とは異なり、ファイル指定モードでは自動的に改行されないため、忘れるとログが一行に繋がってしまい読みづらくなります。

エラーログの出力先はどこ?設定の確認と変更

error_log を実行したけれど、どこに書き込まれたのか分からない」というのは、PHP初心者が最初につまずくポイントです。

出力先はサーバーの設定によって異なります。

php.ini で設定を確認する

PHPの動作設定ファイルである php.ini の中にある、以下の2つの項目がログ出力を制御しています。

  1. log_errors: エラーログの出力を有効にするかどうか(On / Off)
  2. error_log: 具体的な出力先のファイルパス

現在の設定を確認するには、phpinfo() 関数を使うか、コマンドラインで確認するのが確実です。

<?php
// ブラウザで確認する場合
phpinfo();
?>

コマンドラインでの確認方法:

php -i | grep error_log

一般的な出力先のパス

Linux環境(ApacheやNginx)の場合、設定がデフォルトであれば以下の場所にログがあることが多いでしょう。

  • /var/log/apache2/error.log
  • /var/log/httpd/error_log
  • /var/log/php-fpm/www-error.log

XAMPPやMAMPなどのローカル開発環境では、インストールフォルダ内の logs ディレクトリ(例: C:\xampp\php\logs\php_error_log)を確認してみてください。

配列やオブジェクトをエラーログに出力するテクニック

開発中は、単なる文字列だけでなく、配列(Array)やオブジェクトの中身をログに残してデバッグしたい場面が多々あります。

しかし、error_log 関数は文字列しか受け付けないため、配列をそのまま渡すと Array とだけ記録されてしまい、中身が見えません。

print_r や var_export を活用する

配列やオブジェクトをログに出力するには、それらを文字列に変換する必要があります。

ここで役立つのが print_r または var_export 関数です。

<?php
$user_data = [
    'id' => 101,
    'name' => 'Tanaka',
    'roles' => ['admin', 'editor']
];

// print_r の第二引数を true にすると、出力結果を文字列として返す
error_log("ユーザーデータ: " . print_r($user_data, true));

// var_export も同様に第二引数を true にする
error_log("ユーザーデータ(export): " . var_export($user_data, true));
?>

実行結果(ログファイルの中身)

ログファイルには以下のように記録され、データの構造が一目瞭然となります。

[Date Time] ユーザーデータ: Array
(
    [id] => 101
    [name] => Tanaka
    [roles] => Array
        (
            [0] => admin
            [1] => editor
        )
)

JSON形式で保存したい場合は、json_encode($user_data) を使うのも有効な手段です。
用途に合わせて使い分けると良いでしょう。

エラーログが出力されない時の原因と対処法

「設定したはずなのにログが出ない」「何も記録されない」というトラブルもよく起こります。

主な原因とチェックすべきポイントをまとめました。

1. log_errors が Off になっている

php.ini の設定で log_errors = Off になっていると、いかなるログも出力されません。

必ず On に変更し、Webサーバー(ApacheやPHP-FPM)を再起動してください。

2. ファイルの書き込み権限(パーミッション)がない

指定したログファイル、またはそのディレクトリに対して、PHPを実行しているユーザー(www-dataapache など)が書き込み権限を持っていない場合、ログは出力されません。

特に独自のログファイルを指定した場合は、パーミッションを確認しましょう。

# 権限の確認例
ls -l /var/log/php/
# 書き込み権限を与える例(運用環境に合わせて適切に設定してください)
chmod 775 /var/log/php/my_app.log
chown www-data:www-data /var/log/php/my_app.log

3. ディスク容量がいっぱいになっている

意外と見落としがちなのがディスク容量不足です。

サーバーのディスク容量が満杯だと、新しいログを書き込むことができません。
df -h コマンドなどで空き容量を確認してみましょう。

PHPのスキルを活かして年収を上げる方法

以上、PHPでのエラーログの出力や設定方法などについて解説してきました。

なお、PHPのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

PHPエンジニアの需要は非常に高く求人数・案件数も多いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。

今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。

併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなPHPの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。