我正在尝试将Composer集成到一个旧的PHP应用程序中,该应用程序在仅支持5.2的服务器上运行。该应用程序是使用Zend Framework 1和Doctrine 1编写的。在执行相关集成并尝试在composer上提供的各种软件包后,我在运行应用程序时遇到错误:
PHP Warning: include(Doctrine.php): failed to open stream: No such file or directory in [...]/www/dispatcher.php on line 11
[Sun Oct 21 12:33:31 2012] [error] [client ::1] PHP Warning: include(): Failed opening 'Doctrine.php' for inclusion (include_path='[...]/application/library:[...]/vendor/digital-canvas/zend-framework/library:.:/usr/share/php5:/usr/share/php:[...]/app/application/../library:[...]/application/../ext') in [...]/www/dispatcher.php on line 11
肯定会出现问题,即include_path未被修改为包含Doctrine的位置。 Composer目录中的include_paths.php
文件仅显示:
return array(
$vendorDir . '/digital-canvas/zend-framework/library',
);
并且我注意到Doctrine 1包中的composer.json
个文件都没有包含include-path
指令,我假设该指令会修改该文件。我错过了什么吗?这些包装是否有轻微损坏,需要明确的包含才能开始滚动?
在上面的数组中添加正确的目录可以解决问题。但是我不想触及生成的文件,我希望这个问题有些微妙,我缺少而不需要实现变通方法或弄清楚如何修复已发布的包。
答案 0 :(得分:2)
这种情况下的问题是Doctrine本身似乎并不依赖于include_path,而是ZF1,所以我建议您只需在项目的include路径中添加该路径,如下所示:
{
"include-path": ["vendor/doctrine/doctrine1/lib"]
}
然后使用composer dump-autoload
重新生成自动加载器。