2010-01-02 150 views
3

我知道這與路徑不太正確有關,但讓我感到莫名其妙。我也沒有任何問題,在所有的瀏覽器中運行我的腳本,但是當我做的完全一樣的出發點殼,spl_autoload抱怨和模具:當腳本從命令行運行時,sp​​l_autoload失敗

Fatal error: spl_autoload(): Class db could not be loaded in...

我使用從根目錄的絕對路徑,迴盪屏幕並將其粘貼到一個外殼中,並證實它是好的。請...我錯過了什麼?

+0

你能否提供一個失敗代碼的相關代碼片段? – salathe 2010-01-02 15:18:42

+0

從命令行運行'php -i'並檢查它是否與web服務器使用相同的'php.ini'。 – 2010-01-24 14:54:05

+0

也嘗試以root身份從shell運行該腳本(如果它不是太冒險)。如果它有效,那麼它可能是一個權限問題。 – 2010-02-05 10:11:04

回答

2

嘗試使用__DIR__常量來查找文件,CLI PHP不使用相同的工作目錄。

使用這樣的事情:

function __autoload($class) 
{ 
    require_once(dirname(__FILE__) . '/path/to/libraries/' . $class . '.php'); 
} 
+0

Alix,感謝您的幫助。我從來沒有使用__DIR__常量,並嘗試回顯結果,但只返回'__DIR__。我用echo $ _SERVER ['SCRIPT_FILENAME'];相反,它給了我腳本所在的確切路徑。這是你想看到的嗎? – jim 2010-01-02 15:39:50

+0

'__DIR__'僅在PHP 5.3.0以後纔可用,請改用'dirname(__ FILE __)'。 – 2010-01-02 16:17:20

0

通常可以搶了該項目的根目錄中的線沿線的東西:

// The file that defines this is 2 directories below root, hence the ../ changes. 
define('PATH_ROOT', realpath(dirname(__FILE__) . '/../../')); 

一旦你有你的根路徑,你可以修改包含路徑,使用set_include_path。 (記得包括get_include_path,否則你將失去默認值)

一旦這樣排序,只需設置你的自動加載器假設根目錄,你應該沒問題,因爲它比依靠相對更具體一些可以根據工作目錄改變的路徑。

相關問題