2011年08月03日に投稿

[PHP]crontabでPHPスクリプトを実行すると$_SERVER[‘DOCUMENT_ROOT’]が空になる

最近はTwitterのBOTを作っているのですが、BOTを定期的につぶやかせるにはcrontabが必須です。crontabで相対パスが含まれたPHPスクリプトをそのまま実行すると、正しく動いてくれません。crontabでの実行時はカレントレディレクトリが変わるようなのです。そのため、パスに関しては気を使う必要があります。スクリプトに絶対パスを書くのも汎用性が落ちるので$_SERVER[‘DOCUMENT_ROOT’]を使おうと思ったのですが、どうやら空になってしまうようです。以下は空になってしまうことを確認するためのコードです。


include.phpは読み込まれる用のスクリプトです。$bodyに$_SERVER[‘DOCUMENT_ROOT’]の値を格納します。

include.php

cron.phpはcrontabから実行されるスクリプトです。include.phpを読み込んで指定のメールアドレスにメールを送ります。つまりincludeが成功しなければ$bodyは空になってしまいます。

cron.php

上記のスクリプトをブラウザから実行するとちゃんと$_SERVER[‘DOCUMENT_ROOT’]の値がメールで送られてきますが、crontabで実行したものは空のメールが送られてきます。つまりはcrontabで実行した場合には$_SERVER[‘DOCUMENT_ROOT’]をうまく取得できていないことになります。

関連記事

Leave a Reply