无法加载Zend / Loader.php。试图找出原因?

时间:2020-03-05 18:46:23  来源:igfitidea点击:

我继承了一个客户端站点,该站点每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();
        }
...