2011-02-07 13 views
0

私は現在、cronで自動化しようとしているスクリプトを作成中です。ターミナルを介してスクリプトを実行するのは問題ありませんが、crontabでスクリプトを実行しようとすると、いくつかの問題が発生しています。旨を検証しようとしたときにcronでphpスクリプトを実行しているときに相対パスまたは絶対パスを使用するかどうかは重要ですか?

DOMDocument::loadXML()DOMDocument::validate()を経由して私のスクリプトのロードと検証し、XMLファイルの一部とPHPがエラーをスローします:

Failed to load external entity: /linuxuser/homefolder/my_dtd.dtd 

xmlファイル内では、DTDは次のように設定されています

../../../../../../../my_dtd.dtd 

サーバーの設定に誤りがありますか、この時点で私のPHPコードに問題がある可能性は高いですか?それはxmlファイルに相対的なパスではなく、自分のlinuxホームディレクトリをつかむようです。他の誰かがこのような問題を見ているのか、それとも私が正しい方向に向いているのか疑問に思うだけです。ありがとう。

+0

もちろん、そうではありません。相対パスか絶対パスかにかかわらず、パスは*正しいものでなければなりません。 –

答えて

1

CLI SAPIは、 実行されるスクリプトのディレクトリに カレントディレクトリを変更しないを行います!

PHPスクリプトをCRON経由で実行する場合、PHPスクリプトはユーザーのホームディレクトリで実行されます。スクリプトで使用されているすべての相対パス参照を絶対パスに置き換えるか、スクリプトの先頭に置きます。

chdir(dirname(__FILE__)); # for PHP 5.2.x and below 
# or 
chdir(__DIR__); # for PHP 5.3+ 
+0

それはまさに問題の原因です。どうもありがとう! – rabidocyte

0

xmlファイルに絶対パスを入力してください。

1

ほとんどの場合、問題は作業ディレクトリと相対パスの解決です。 differences in CLI usage(コマンドラインインターフェイス)のためのPHPのマニュアルを引用

関連する問題