2014-10-01 97 views
0

對不起,我的髒話:)spl_autoload故障

在我的本地Apache 2.2的PHP 5.3.13一切OK,但遠程服務器(PHP 5.3太)spl_autoload拋出邏輯異常:

Fatal error: Uncaught exception 'LogicException' with message 'Class System\Core\Helper\Helper could not be loaded' in /home/u737840143/public_html/index.php:6 Stack trace: #0 /home/u737840143/public_html/index.php(6): spl_autoload('System\Core\Hel...') #1 {main} thrown in /home/u737840143/public_html/index.php on line 6

代碼:

<?php 

spl_autoload_extensions('.php'); 
spl_autoload_register(); 

\System\Core\Helper\Helper::getLanguage(); 

$router = new \System\Router\Router(); 
$router->init(); 

遠程文件夾結構對應於本地。

+0

您使用的是基於PHP的框架嗎?這是安裝在兩臺服務器上嗎? – kums 2014-10-01 17:38:36

+0

調試:編輯腳本以使用'include class_file ...'加載類文件 - 文件加載和類是否可用?如果是這樣,那麼你的'自動加載'是錯誤的。如果不加載,則更改'include class_file ...'直到加載。然後整理'spl_loader'。 – 2014-10-01 19:35:42

+0

不,我沒有在這個項目中使用任何框架,只有PHP。 – Dmitry 2014-10-03 03:57:02

回答

0

我發現答案 - spl_autoloader()在許多操作系統中無法正確使用大寫字母,但在Windows上效果很好。 因此,在重命名小寫的所有文件夾(是,並重寫所有文件中的命名空間...)後,所有內容都開始工作。

<?php 

spl_autoload_extensions('.php'); 

spl_autoload_register(); 


try { 

    \system\core\helper\Helper::getLanguage(); 

    $router = new \system\router\Router(); 
    $router->init(); 

} catch (\Exception $e){ 
    echo $e; 
} 
+1

爲什麼不相應地寫入自動加載器?你不需要重命名。你爲什麼認爲Zend Framework(和其他ofc)在Linux和Windows上工作時沒有小寫?例如'\ Zend_Action'。 – DanFromGermany 2014-10-05 17:25:43

+0

我使用windows。然而,所有命名空間,類名和'includes'都是'完全''字母'完美'的名字,所以它們可以用於'信箱操作系統',如'unix'或變體。我有我自己的'自動類加載器'它可以在兩個操作系統上工作,並且對'字母大小寫'沒有任何特別之處。我使用各種其他「供應商」的東西,如'symfony組件'。 – 2014-10-05 20:03:43

+0

丹,我會使用默認的自動加載器,如果我想寫我自己的自動加載器,我會這樣做:)瑞恩,我發現這個技巧在網上somwhere,並重命名文件夾使我的應用程序正常工作,所以我認爲這是不是那麼糟糕。而且,如上所述,我嘗試使用默認類 - 僅供學習。 – Dmitry 2014-10-07 02:34:08