2014-10-01 122 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