2010-03-06 16 views
2

我有一些頁面,可以在本地正常工作(在php.ini中使用WAMP和error_reporting E_ALL),但是一旦我上傳它們,就會出現以下錯誤: 致命錯誤:調用未定義的方法DB :: exists() 該方法在那裏,我不知道爲什麼它不能被看到。PHP致命錯誤:在網絡上傳後調用未定義的方法

你知道哪裏出了問題嗎?

+0

很有可能是服務器上沒有安裝庫或擴展。請顯示一些代碼,如果可能的話,調用'phpinfo()'的PHP版本號可以在服務器和本地提供。 – 2010-03-06 23:11:22

+0

本地與服務器= PHP 5.3.0與PHP 5.2.5。所有類(包括數據庫)都通過__autoload()加載並作爲每個頁面中的組件加載。我試圖用所有類的單個require_once語句替換__autoload,但這並沒有解決問題。 DB :: exists()是從另一個類(Visitor)靜態調用的。 – user287966 2010-03-07 12:27:48

回答

0

不,方法不存在。您越早學會信任錯誤消息,越早讓您的應用程序正常工作。

+0

雖然這是真的,但對任何人都沒有幫助。 – Dolph 2010-03-07 00:00:18

+0

絕對不是答案。可能更適合作爲評論。 – mauris 2010-03-07 04:33:15

+0

實際上它不僅僅是答案。相信你的眼睛是編程學習的第一步 – 2010-03-11 13:59:48

0

你可能在你的網站代碼以外的地方安裝了梨和一些庫。 檢查您在php.ini中包含的點並上傳。

0

您可能希望檢查網絡服務器的php.ini配置與您的本地php.ini,以查看是否有任何模塊未加載到您的PHP應用程序可能需要的網絡服務器上。

此外,請檢查您的網絡服務器和本地PHP上的PHP版本號,以及檢查Web版本的PHP版本限制。

1

嘗試把調試語句到定義class DBDB::exists()文件,如:

echo "DB file was included\n"; 

這是否消息?如果沒有,那麼該文件沒有被包括在內,這解釋了爲什麼找不到該方法。

查找文件所在是應該得到包括位置,並檢查包括在點路徑:

echo "Include path is: " . get_include_path() . "\n"; 

是否與其他文件具有相同的名稱中列出的其他目錄中存在包含路徑?如果是這樣,您可能需要更改包含路徑中的其他條目(在php.ini中定義爲include_path,但也可以在運行時用set_include_path()編輯)

0

服務器安裝了Pear :: DB (http://pear.php.net/package/DB/redirected)。您的自動加載功能正在加載Pear的DB類,而不是您的。

如果你有對服務器的控制,這樣的事情應該工作

$ sudo pear uninstall DB 

如果你沒有對服務器的控制,你需要你的數據庫類重命名爲別的東西......

您可以修改include_path以在您自己的類之後加載PEAR類,但這可能會導致其他命名衝突。

相關問題