2

次のファイル構造があります。

cron.php /includes/functions.php /classes/ClassName.php

corn.php には functions.php が含まれています。functions.php にはプリミティブ オートローダーが含まれています。

 function __autoload($class_name) {
   require_once('classes/'.$class_name.'.php');
 }

cron.php がブラウザから呼び出されたときに正常に動作します。ただし、シェルから実行すると、「そのようなファイルまたはディレクトリはありません」という致命的なエラーが発生します。'classes/'.$class_name.'.php' を realpath() 関数にラップしようとしましたが、役に立ちませんでした。お知らせ下さい。

4

4 に答える 4

4

dirname(__FILE__)自動ロード PHP スクリプトの「絶対」現在のディレクトリを取得するために使用できます。

次のようなことができます (自動読み込みスクリプトがプロジェクトのサブディレクトリにあると仮定します):

function __autoload($class_name) {
  require_once(dirname(__FILE__).'/../classes/'.$class_name.'.php');
}

見る:

于 2011-04-14T10:44:53.387 に答える
2
 function __autoload($class_name) {
   require_once(dirname(__file__) . '/classes/'.$class_name.'.php');
 }
于 2011-04-14T10:45:06.990 に答える
0

どのように仕事をスケジュールしましたか?ファイルが /path/to/cron.php の場合は、「cd /path/to && php cron.php」のようなものを試してください。おそらく「php /path/to/cron.php」のようなものを実行し、$ PWD は /path/to/ ではないため、クラスが見つかりません

于 2011-04-14T10:48:00.930 に答える
0

相対パスを使用しているため、ブラウザから呼び出す場合と CLI から呼び出す場合では、その中の PHP ディレクトリが異なります。

この関数を使用して、ブラウザのディレクトリと一致するようにディレクトリを変更します。

更新: 提案からコードを提案します。

chdir(dirname(__FILENAME__));
于 2011-04-14T10:48:39.757 に答える