別ディレクトリから PHP を実行するとき相対パスはエラーになる
2022年6月6日
皆さんこんにちは、フロントエンドエンジニアの末ちゃんです。 つい先日、しばらくぶりに Cron を使って PHP を定期実行しようとしたのですが、その際PHPのrequire文でうっかり相対パスを使用してエラーを発生させてしまいました。
エラーの内容
PHP Warning: require(./hogehoge.php): failed to open stream: No such file or directory in /home/hogehoge/fugafuga/foo-bar.php on line 16
ご覧の様に、require
で呼びだしたファイルが開けませんでした。というエラーです。
Cron の内容
Cron には以下のように記述をしていました。15 2 * * * php foo-bar.php
エラーの原因
シンプルにPHPの仕様の問題です。 PHPではファイルを実行したディレクトリの場所がカレントディレクトリになってしまいます。上記Cronは/home/hogehoge/fugafuga
ではない場所で実行されているので、hogehoge.php
は行方不明となってしまっていました。
エラーの解決方法
解決方法1 実行ディレクトリを移動する
Cron のコマンドで、実行ディレクトリを移動することで解決できます。15 2 * * * cd /home/hogehoge/fugafuga && php foo-bar.php
解決方法2 絶対パスでrequireする
require文を絶対パスで記述することで、この問題は解決できます。通常はこの方法を使用して記述します。require(dirname(__FILE__)."/hogehoge.php")