我知道這與路徑不太正確有關,但讓我感到莫名其妙。我也沒有任何問題,在所有的瀏覽器中運行我的腳本,但是當我做的完全一樣的出發點殼,spl_autoload抱怨和模具:當腳本從命令行運行時,spl_autoload失敗
Fatal error: spl_autoload(): Class db could not be loaded in...
我使用從根目錄的絕對路徑,迴盪屏幕並將其粘貼到一個外殼中,並證實它是好的。請...我錯過了什麼?
我知道這與路徑不太正確有關,但讓我感到莫名其妙。我也沒有任何問題,在所有的瀏覽器中運行我的腳本,但是當我做的完全一樣的出發點殼,spl_autoload抱怨和模具:當腳本從命令行運行時,spl_autoload失敗
Fatal error: spl_autoload(): Class db could not be loaded in...
我使用從根目錄的絕對路徑,迴盪屏幕並將其粘貼到一個外殼中,並證實它是好的。請...我錯過了什麼?
嘗試使用__DIR__
常量來查找文件,CLI PHP不使用相同的工作目錄。
使用這樣的事情:
function __autoload($class)
{
require_once(dirname(__FILE__) . '/path/to/libraries/' . $class . '.php');
}
Alix,感謝您的幫助。我從來沒有使用__DIR__常量,並嘗試回顯結果,但只返回'__DIR__。我用echo $ _SERVER ['SCRIPT_FILENAME'];相反,它給了我腳本所在的確切路徑。這是你想看到的嗎? – jim 2010-01-02 15:39:50
'__DIR__'僅在PHP 5.3.0以後纔可用,請改用'dirname(__ FILE __)'。 – 2010-01-02 16:17:20
通常可以搶了該項目的根目錄中的線沿線的東西:
// 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,否則你將失去默認值)
一旦這樣排序,只需設置你的自動加載器假設根目錄,你應該沒問題,因爲它比依靠相對更具體一些可以根據工作目錄改變的路徑。
你能否提供一個失敗代碼的相關代碼片段? – salathe 2010-01-02 15:18:42
從命令行運行'php -i'並檢查它是否與web服務器使用相同的'php.ini'。 – 2010-01-24 14:54:05
也嘗試以root身份從shell運行該腳本(如果它不是太冒險)。如果它有效,那麼它可能是一個權限問題。 – 2010-02-05 10:11:04