我有一个在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)
。
答案 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;