我正在使用Silex开展一个项目。在一个特定的文件中,我添加了一个use
语句,让自动加载器包含一个特定的php文件。稍后在文件中,我使用该类。一切都在开发服务器上,但当我转向生产时,我得到一条Fatal error: Class not found
消息。编辑:两台服务器现在都使用PHP 5.4.4。
是否存在可能导致此问题的任何特定安装问题?我可以确认作曲家生成的命名空间自动加载文件都是一样的。
仅仅为了彻底,这里是包含声明:
use Instaphp;
以下是代码中后面的类的用法:
$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();
});
这是确切的错误:
Fatal error: Class 'Instaphp\Config' not found in /var/www/silexsandbox/src/TagFrame/Silex/TagFrameServiceProvider.php on line 89
更新:我应该补充一点,我在我正在研究的相当大的代码库中没有遇到任何其他错误,所以我知道它并不像所有名称空间不起作用那么简单。
答案 0 :(得分:8)
默认情况下,Mac使用Journaled Case-Insensitive Filesystem。 Linux,取决于你的口味,大多是区分大小写的。这肯定会导致您在上面描述的行为。
我建议您在Mac上创建第二个分区,并将其格式化为Journaled Case-Sensitive,使其与您的生产环境更接近。
答案 1 :(得分:4)
感谢您的评论。我确实确保使用Composer进行了更新,以便自动装载器被转储。
问题(正如我在摆弄后发现的那样)是我使用的第三方库(Instaphp)的目录结构是小写的。这不会给我的Mac带来问题,但是生产服务器正在运行Ubuntu,我认为它使用区分大小写的文件处理实用程序,而Mac则没有。
我完全在为此花一个晚上自杀!