2010年06月24日に投稿

PHPプログラムにブラウザでアクセスすると実行されるが、cronで実行できない

cronでPHPプログラムを実行しようとした際に
ブラウザでアクセスすると実行されるのですが
cronの定期実行では実行されない現象に出くわしました。

今回動かなかった原因はinclude関数とパスの関係を
理解していなかったためでした。
そのプログラムにはinclude関数で他のファイルを読み込んで
いたのですが、相対パスの指定がまずかったようです。
(PEARのMDB2.phpです。)

cronで実行するプログラム内でincludeやrequireを使用する場合は
絶対パスを指定するか、include_pathの通っているディレクトリから相対パスを
指定する必要があります。

これは、ブラウザでアクセスした時とcronから実行する時ではv
カレントディレクトリが異なるためとのことです。

これを理解するのに
下記のページが参考になりました。
http://q.hatena.ne.jp/1211819991

読み込むファイルが少ない場合は絶対パスを指定すれば問題ありませんが
PEARのようないくつファイルが読み込まれるか分からないものについては
.htaccessやini_set()でインクルードパスを指定するのが現実的です。

インクルードパスを設定する方法は
下記のページが参考になります。

http://www.findxfine.com/php/720.html
http://side-b.sto.co.jp/weblog/archives/163
http://maihy.com/hp/phptech/phptech_incpath.html

関連記事

Leave a Reply