PHP webから実行するものが、cronで動かない


cronに対してのスクリプトのパスは正常に通っているものとします。

スクリプト内にやはり問題がありました。

スクリプトでファイルを読み取り、書き込みしているところに問題がありました。

そのファイルに対して、絶対パスが必要でした。

$filename=”a.txt”;とスクリプトの置いてあるディレクトリと同じであっても、
たとえば、
$filename=”/home/hogehoge/public_html/hoge/a.txt”;
のように指定する必要がありました。
cronから見て、どこにあるかということであり、
絶対パスにしてしまうのが、いいようです。

問題のファイルの更新日時を見ていて気づきました。

WEBから実行して問題なく動いていたので、安心していましたが、
cronは、cronでテストしないとダメですね。

エラーログをとる

「error_log」関数を使用すると、スクリプト内で発生したエラーをログファイルに出力することができます。使い方は次のようになります。

error_log($message, $message_type, $destination, $extra_headers);
  • $message: 出力するメッセージ。文字列や数値などを指定できます。
  • $message_type: 出力先を指定する定数。省略した場合は、0(エラーログ)が指定されます。
  • $destination: 出力先を指定する文字列。省略した場合は、php.iniの「error_log」設定が使用されます。
  • $extra_headers: 追加で送信するヘッダーを指定する文字列。省略した場合は、追加のヘッダーは送信されません。

以下に例を示します。

error_log('エラーが発生しました。');

上記の例では、「エラーが発生しました。」というメッセージを、php.iniの「error_log」設定で指定されたログファイルに出力します。

Copy codeerror_log('エラーが発生しました。', 1, '/var/log/php_errors.log');

上記の例では、「エラーが発生しました。」というメッセージを、「/var/log/php_errors.log」というファイルに出力します。

「error_log」関数を使用することで、スクリプト内で発生したエラーを簡単にログに出力することができます。ログを確認することで、問題を特定しやすくなるので、スクリプトをデバッグする際には有効です。