无法加载Zend / Loader.php。试图找出原因?
我继承了一个客户端站点,该站点每3或者4天崩溃一次。它是使用zend-framework构建的,我对此并不了解。
如下代码:
<?php // Make sure classes are in the include path. ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes'); // Use autoload so include or require statements are not needed. require_once 'Zend/Loader.php'; Zend_Loader::registerAutoload(); // Run the application. App_Main::run('production');
导致以下错误:
[Tue Sep 02 12:58:45 2008] [error] [client 78.***.***.32] PHP Warning: require_once(Zend/Loader.php) [function.require-once]: failed to open stream: No such file or directory in /srv/www/vhosts/example.co.uk/httpdocs/bootstrap.php on line 6 [Tue Sep 02 12:58:45 2008] [error] [client 78.***.***.32] PHP Fatal error: require_once() [function.require]: Failed opening required 'Zend/Loader.php' (include_path='.:.:/usr/share/php5:/usr/share/php5/PEAR') in /srv/www/vhosts/example.co.uk/httpdocs/bootstrap.php on line 6
我什至不知道从哪里开始尝试解决此问题。我对PHP的了解是中级的,但是就像我说的那样,我没有使用Zend的经验。另外,也不可以与原始开发者联系。
有趣的是,即使每次访问该站点的页面时都运行该代码,该错误只会时不时发生。
我相信这一定与include_path有关,但我不确定。
解决方案
回答
它仅偶尔发生的事实使我认为这不是编程问题,而更多的是sysadmin问题(如果它是实现中的缺陷),考虑到错误为"没有此类文件或者目录"。两个猜测
- 有多个前端Web服务器,其中一个配置错误(缺少Zend Framework)。
- PEAR包含目录是通过网络安装的,偶尔会在短时间内消失。
这可能是一个更加隐蔽的文件系统问题,但是人们会认为这不仅会影响一个文件。
回答
首先,我认为包含路径应该以斜线结尾。这是我的一个例子:
set_include_path('../library/ZendFramework-1.5.2/library/:../application/classes/:../application/classes/excpetions/:../application/forms/');
引导文件将包含在另一个文件中(可能是index.php文件)。这意味着,如果包含路径是相对的(就像我的一样)而不是绝对的,那么如果包含bootstrap.php的文件发生更改,则查找Loader.php的路径也会更改。
例如,我的Zend应用程序中有两个index.php文件,一个用于前端,一个用于管理区域。这些索引文件各自需要带有不同相对路径的自己的bootstrap.php,因为它们包含在不同的索引文件中,这意味着它们必须相对于原始请求的索引文件,而不是它们在其中定义的bootstrap文件。
这可以解释为什么问题是断断续续的,可能有另一个文件(包括引导程序)仅在偶尔使用的某个地方。我会在所有站点文件中搜索" bootstrap.php",并查看所有包含/需要此文件的地方。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
回答
我有同样的问题,但问题在于文件的权限。我为所有RWX都提供了chmod,现在一切正常。
所以也许其他人也会和我有同样的问题,那么这就是解决方案。
问候
回答
有时它可以工作,因此PHP端没有任何内在的错误(如果路径错误,它将永远无法工作...但是,是的,是吗?)。那么,是什么导致Loader.php定期无法访问?我会怀疑权限问题。使Loader.php或者它无法访问的目录的某些原因。也许cron作业正在设置/重置权限?首先检查一下。查看权限在工作时的权限以及不工作时的权限。
回答
在我的情况下,Zend / Loader.php不在PEAR目录中。它应该在那里,但是我的网络服务器有点生。但是我们也可以将其插入到library / Zend目录中。
但这确实不能回答为什么问题仅在某些时候出现的原因。
回答
当我使用PHPUnit 3.5.5时,我也遇到了此错误。我的主要应用程序脚本很好地加载了zend框架,但是测试类遇到了错误。
我的解决方案是将以下内容添加到测试类中
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes'); require_once 'ThemeWidgets.php'; require_once 'PHPUnit/Framework.php'; require_once '../../library/Zend/Loader/AutoLoader.php'; class ThemeWidgetsTest extends PHPUnit_Framework_TestCase { public function setUp() { Zend_Loader_Autoloader::getInstance(); } ...