29

このファイルを含める必要がある cron ジョブがあります。

require '../includes/common.php';

ただし、(ローカル テストではなく)cron ジョブを介して実行すると、相対パスは機能しません。cron ジョブは、次のファイルを (ライブ サーバー上で) 実行します。

/home/username123/public_html/cron/mycronjob.php

エラーは次のとおりです。

Fatal error: require(): Failed opening required '../includes/common.php' 
(include_path='.:/usr/lib/php:/usr/local/lib/php') in 
/home/username123/public_html/cron/mycronjob.php on line 2

cron ジョブと同じ絶対形式を使用すると、次のcommon.php場所にあります。

/home/username123/public_html/includes/common.php

それは、2 行目を次のように置き換える必要があるということですか。

require '/home/username123/public_html/includes/common.php';

?

ありがとう!

4

6 に答える 6

33

技術的に見た php スクリプトは、cron がある場所で実行されます。元。cron が /bin/cron にある場合、このステートメントは /bin/includes/common.php で common.php を探します。

ええ、おそらくフルパスを使用するか、 set_include_pathを使用する必要があります

set_include_path('/home/username123/public_html/includes/');
require 'common.php';
于 2010-06-25T14:18:01.023 に答える
29

ノノ。cron では絶対パスを使用する必要があります。

私がすることは:

// supouse your cron is on app/cron and your lib is on app/lib
$base = dirname(dirname(__FILE__)); // now $base contains "app"

include_once $base . '/lib/db.inc';

// move on
于 2010-06-25T14:19:28.743 に答える
3

絶対パス指定を推奨するソリューションに代わる方法はchdir、スクリプトで a を使用することです。そうすれば、相対パスは期待どおりに機能します。

たとえば、スクリプトのディレクトリに変更するには:

$curr_dir = dirname(__FILE__);
chdir($curr_dir);

スクリプトの親ディレクトリに変更するには:

$curr_dir = dirname(__FILE__);
chdir($curr_dir . "/..");

などなど。

于 2017-09-03T14:20:35.580 に答える
0

相対パスが機能しない場合は、cron タスクの実行時に設定された現在のディレクトリが /home/username123/public_html ではないことを意味します。このような場合、絶対パスしか使用できません。

于 2010-06-25T14:21:42.017 に答える
0

実行中のスクリプトだけが include_path を設定していて、そのスクリプトをインクルードしているように思えます。phpinfo() を使用して include_path のグローバル設定とローカル設定を確認してください。

于 2010-06-25T14:29:07.923 に答える