Autoload + Namespace在localhost中工作,但在服务器中不起作用

时间:2016-11-01 22:01:04

标签: php .htaccess ubuntu-14.04 digital-ocean

我有一个在localhost中工作但在我的服务器上不起作用的代码,我有一个名为platform的文件夹路径为/var/www/html/platform

平台/的的.htaccess

AcceptPathInfo On
RewriteEngine on
RewriteBase /var/www/html/platform/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?request=$1 [L,QSA]

plataform /的 autoload.php

function __autoload($className) {
$file = $className . '.php';
if(file_exists($file)) {
     require_once $file;
}else{
    //fail
}

plataform /的的index.php

include ('autoload.php');

$controller = new application\controllers\Controller();

plataform /应用/控制器/的 Controller.php这样

namespace application\controllers;

class Controller{

}

在我的localhost中,此代码有效,但在我的服务器中,我收到以下消息:

  

致命错误:找不到类'application \ controllers \ controller'   第12行的/var/www/html/platform/index.php

我该如何解决这个问题?我正在使用Ubuntu PHPMyAdmin on 14.04 (Digital Ocean)

1 个答案:

答案 0 :(得分:0)

注册自动装带器。  *  *基于此处的官方PSR-4自动加载器示例:  * https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md

这是一个简单的自动加载类,也应该处理命名空间

class Autoload {

    public function __construct(){

    spl_autoload_register(function ($class) {

        // project-specific namespace prefix
        $prefix = 'App\\';

        // For backwards compatibility
        $customBaseDir = '';

        // base directory for the namespace prefix
        $baseDir = $customBaseDir ?: __DIR__ . '/';

        // does the class use the namespace prefix?
        $len = strlen($prefix);
        if (strncmp($prefix, $class, $len) !== 0) {
            // no, move to the next registered autoloader
            return;
        }

        // get the relative class name
        $relativeClass = substr($class, $len);

        // replace the namespace prefix with the base directory, replace namespace
        // separators with directory separators in the relative class name, append
        // with .php
        $file = rtrim($baseDir, '/') . '/' . str_replace('\\', '/', $relativeClass) . '.php';

        // if the file exists, require it
        if (file_exists($file)) {
            require $file;
        }   
    });
}
}

保存在Autoload.php类中。包含路径并初始化以使用.. $ autoload = new Autoload;