PHP:自动加载器无法找到文件

时间:2016-02-19 10:40:13

标签: php autoloader

我正在使用自动加载器按名称空间加载类,它在localhost上运行正常,但在服务器上没有运行。
Autoloader.php加载类时,PHP会向我显示此错误:

Warning: require(\..\backoffice\controllers\EquipementsManager.php) failed to open stream: No such file or directory

但是我确定路径是正确的并且文件EquipementsManager.php存在于此路径中!这意味着自动加载器正在使用正确的路径正确加载类,但PHP不断给出No such file or directory错误!<登记/> 代码Autoloader.php

<?php
/**
 * Class Autoloader
 */

class Autoloader{
    /**
     * Enregistre notre autoloader
     */
    static function register(){
        spl_autoload_register(array(__CLASS__, 'autoload'));
    }

    /**
     * Inclue le fichier correspondant à notre classe
     * @param $class string Le nom de la classe à charger
     */
    static function autoload($class){
        require '\\..\\'.$class . '.php';
    }

}

Class EquipementsManager:

namespace backoffice\controllers;

use backoffice\entities\Connexion;
use backoffice\entities\Equipement;

class EquipementsManager{
    //---some stuff to do----
}

我也尝试过这个__DIR__.'\\..\\'.$class . '.php'仍然是同样的问题,适用于localhost但不适用于网络 今天编辑(2016年2月20日):
我编辑了我的autoload()函数:

static function autoload($class){
        $file = (strpos($class, 'backoffice') === false) ? $class : str_replace('\\', DIRECTORY_SEPARATOR, $class);
        require $file . '.php';
    }

现在我的文件已正确加载,但会出现另一个错误:

require(JsonSerializable.php) [function.require]: failed to open stream: No such file or directory

我使用\JsonSerializable interface将我的objet转换为jason数组,如下所示:

namespace backoffice\entities;

/**
 * PropertyType
 */
class PropertyType implements \JsonSerializable
{

}

如你所知,这个界面在SPL中,为什么他不知道呢?!

1 个答案:

答案 0 :(得分:-1)

尝试

$require = str_replace('\\', DIRECTORY_SEPARATOR, '..\\'.$class.'.php');
require($require);