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

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

Failed to load Zend/Loader.php. Trying to work out why?

我继承了一个客户端站点,该站点每3或4天崩溃一次。 它是使用我不了解的zend-framework构建的。

如下代码:

1
2
3
4
5
6
7
8
9
10
<?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');

导致以下错误:

1
2
[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有关,但我不


首先,我认为您的包含路径应??该以斜线结尾。这是我的一个例子:

1
    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,现在一切正常。

所以也许其他人也会和我有同样的问题,那么这就是解决方案。

问候


它仅偶尔发生的事实使我认为这不是编程问题,而更多是sysadmin问题-如果它是实现中的缺陷,则考虑到错误为"没有此类文件,您可能希望它始终失败"或目录"。两个猜测

  • 有多个前端Web服务器,其中一个配置错误(缺少Zend Framework)。

  • PEAR包含目录是通过网络安装的,偶尔会在短时间内消失。

这可能是一个更加隐蔽的文件系统问题,但是人们会认为这不仅会影响一个文件。


当我使用PHPUnit 3.5.5时,我也遇到了此错误。我的主要应用程序脚本很好地加载了zend框架,但是测试类遇到了错误。

我的解决方案是将以下内容添加到测试类中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   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();
        }
...

在我的情况下,Zend / Loader.php不在PEAR目录中。它应该在那里,但是我的网络服务器有点生。但是您也可以将其插入到library / Zend目录中。

但这确实不能回答为什么您的问题仅在某些时候出现的原因。


有时它可以工作,因此PHP方面没有任何天生的错误(如果路径错误,它将永远无法工作...但是,是的,是吗?)。那么,是什么导致Loader.php定期无法访问?我会怀疑权限问题。使Loader.php或它无法访问的目录的某些原因。也许cron作业正在设置/重置权限?首先检查。查看什么权限有效,什么时候无效。


推荐阅读