2011-04-14 81 views
2

我有以下文件結構:PHP自動加載的問題

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

corn.php包括的functions.php調用新的ClassName()。和functions.php中包含了原始的磁帶自動加載機:

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

時cron.php從瀏覽器調用工作正常。但是,如果從shell運行,它會給「沒有這樣的文件或目錄」致命錯誤。我嘗試將'classes /'。$ class_name。'。php'包裝到realpath()函數中無濟於事。請指教。

回答

2
function __autoload($class_name) { 
    require_once(dirname(__file__) . '/classes/'.$class_name.'.php'); 
} 
+0

它可以工作,但修復很少:'dirname(__ file__)。 '/../ classes /'.$ class_name。'。php'',因爲您的代碼將「includes」文件夾包含到路徑中。反正謝謝你。 – 2011-04-14 10:49:18

0

你是如何安排工作的?如果該文件是/path/to/cron.php,請嘗試如下所示: 「cd/path/to & & php cron.php」,您現在可能會執行類似「php /path/to/cron.php」的操作,並且$ PWD不是/ path/to/there所以沒有找到類

0

因爲使用相對路徑和它所在的PHP目錄與從瀏覽器和CLI調用時不同。

使用此功能可更改目錄以匹配瀏覽器目錄。

更新:建議代碼從建議。

chdir(dirname(__FILENAME__)); 
+2

不是一個可行的解決方案,如果您將腳本移動到您身邊,那麼還需要對其進行編輯以保護路徑。 'dirname(__ FILE __)'是一種更好的解決方案! – 2011-04-14 10:50:29

+0

我剛剛瞭解'dirname(__ FILENAME __);'。所以另一個解決方案是做這個'chdir(dirname(__ FILENAME __));'感謝指針。 :) – lxcid 2011-04-14 10:52:18