Zend Framework を使用してコマンド ライン ユーティリティを作成し、夜間のレポート作成を行いました。付随するサイトと同じ機能を大量に使用しています。手動で実行するとうまく機能しますが、cron で実行するとインクルード パスの問題が発生します。set_include_path で簡単に修正できるようですが、何か足りないのでしょうか?
私のディレクトリ構造は次のようになります。
/var/www/clientname/
application
Globals.php
commandline
commandline_bootstrap.php
public_html
public_bootstrap.php
library
Zend
public_bootstrap.php では、現在のディレクトリに対して問題なく set_include_path を使用しています。
set_include_path('../library' . PATH_SEPARATOR . get_include_path());
私が正しく理解している場合、commandline_bootstrap.php に絶対パスを入力する必要があるため、cron はすべてがどこにあるかを認識します。私のファイルは次のように始まります:
error_reporting(E_ALL);
set_include_path('/var/www/clientname/library' . PATH_SEPARATOR . get_include_path());
require_once "../application/Globals.php";
しかし、cron経由で実行すると、次のエラーが発生します。
PHP 致命的なエラー: require_once(): 必要な '../application/Globals.php' (include_path='/var/www/clientname/library/') を /var/www/clientname/commandline/zfcli.php で開くことができませんでした11行目
コマンドラインを実行してphpinfoをダンプすると、次のように表示されるため、PHPは新しいパスを受け入れていると思います。
include_path => /var/www/clientname/library/:.:/usr/share/pear:/usr/share/php => .:/usr/share/pear:/usr/share/php
ここの構文が少し奇妙に見えることは認めますが、修正方法がわかりません。どんな提案でも大歓迎です。
ありがとう夏