0

我这里有问题。我已经为所有类创建了命名空间。以前我使用 Windows 7 开发当前的应用程序,一切都很好。现在我刚搬到ubuntu,问题来了。

索引.php

spl_autoload_extensions(".php");
/*spl_autoload_register(function ($class) {
    require __DIR__ . '/../' . $class . '.php';
});*/
//provided i have tried the above method, which works on windows 7 but not Ubuntu
spl_autoload_register(function ($class) {
    require '/../' . $class . '.php';
});

//for your info, i do this
//require "../resources/library/Config.php";
//it works, no error

use resources\library as LIB;
use resources\dal as DAL;

//instantiation
$config = new LIB\Config();
print_r($config->fbKey());

我收到了这个错误

PHP Warning:  require(../resources\\library\\Config.php): failed to open stream: No such file or directory in /home/user/dir1/dir2/index.php

我找不到错误。希望你们能帮助我。任何问题都不要犹豫评论我会编辑。提前致谢。

更新 - 额外信息

PHP 版本 5.4.6

最近更新

知道如何在不使用 str_replace 的情况下解决这个问题吗?JULP 和 MOONWAVE 有答案!

4

3 回答 3

1

您的目录分隔符有问题,因为它在 Win 和 Unix 中是不同的。

为了保持一致,您应该更新您的自动加载功能:

spl_autoload_register(function ($class) {
    require '/../' . str_replace("\\", DIRECTORY_SEPARATOR, $class) . '.php';
});

编辑:该解决方案在生产环境中被广泛接受。

于 2012-12-10T16:20:57.073 回答
0

您使用哪个 PHP 版本?(在 PHP < 5.3.3 中,默认 spl_autoload_register 不支持命名空间 - 我的意思是 \ 在 Unix 系统上没有被 / 替换)

在您的代码中,尝试替换:

require __DIR__ . '/../' . $class . '.php';

经过:

require __DIR__ . '/../' . str_replace('\\', '/', $class) . '.php';

=> 始终在路径中使用斜杠,它们无处不在。反斜杠,不要。并且不要忘记文件名在 Unix 系统上是区分大小写的,这与 Windows 正好相反。

于 2012-12-10T16:17:53.610 回答
0

DIRECTORY_SEPARATOR如果您要进行跨平台开发,您应该熟悉 PHP 常量的使用。

那里的错误信息应该告诉你所有你需要知道的。您没有生成正确的 LINUX 文件路径。

于 2012-12-10T16:19:13.597 回答