仅在生产服务器上找不到类错误

its*_*inn 7 php namespaces silex

我正在使用Silex开展一个项目.在一个特定的文件中,我添加了一个use语句,让自动加载器包含一个特定的php文件.稍后在文件中,我使用该类.一切都在开发服务器上,但是当我转向生产时,我收到了一条Fatal error: Class not found消息.编辑:两台服务器现在都使用PHP 5.4.4.

是否存在可能导致此问题的任何特定安装问题?我可以确认作曲家生成的两个命名空间自动加载文件是相同的.

仅仅为了彻底,这里是包含声明:

use Instaphp;
Run Code Online (Sandbox Code Playgroud)

以下是代码中后面的类的用法:

$app['instaphp'] = $app->share(function() use ($app) {
            if($app['tagframe.instagram_token'] === null) {
                return Instaphp\Instaphp::Instance();
            } else {
                return Instaphp\Instaphp::Instance($app['tagframe.instagram_token']);
            }
        });

        $app['instaphp.config'] = $app->share(function() use ($app) {
            return Instaphp\Config::Instance();
        });
Run Code Online (Sandbox Code Playgroud)

这是确切的错误:

Fatal error: Class 'Instaphp\Config' not found in /var/www/silexsandbox/src/TagFrame/Silex/TagFrameServiceProvider.php on line 89
Run Code Online (Sandbox Code Playgroud)

更新:我应该补充一点,我在我正在研究的相当大的代码库中的其他地方都没有遇到过这样的错误,所以我知道它并不像ALL命名空间那么简单.

Mik*_*osh 8

默认情况下,Mac使用Journaled Case-Insensitive Filesystem.Linux,取决于你的口味,大多是区分大小写的.这肯定会导致您在上面描述的行为.

我建议你在你的Mac上创建第二个分区并将其格式化为Journaled Case-Sensitive,使其与您的生产环境更接近.


its*_*inn 6

感谢您的评论。我确实确保我使用 Composer 进行了更新,以便自动装载机被转储。

问题(我在折腾了几个小时后发现)是我使用的第三方库 (Instaphp) 的目录结构是小写的。这并没有给我的 Mac 带来问题,但是生产服务器正在运行 Ubuntu,我想它使用区分大小写的文件处理实用程序,而 Mac 没有。

我完全为自己在这上面度过了一夜而自责!