【问题标题】:Failed to load Zend/Loader.php. Trying to work out why?未能加载 Zend/Loader.php。试图找出原因?
【发布时间】:2010-09-07 13:12:44
【问题描述】:

我继承了一个每 3 或 4 天崩溃一次的客户网站。它是使用我不知道的 zend 框架构建的。

以下代码:

<?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');

导致以下错误:

[2008 年 9 月 2 日星期二 12:58:45] [错误] [客户端 78.***.***.32] PHP 警告:require_once(Zend/Loader.php) [function.require-once]:无法打开流:第 6 行的 /srv/www/vhosts/example.co.uk/httpdocs/bootstrap.php 中没有这样的文件或目录 [2008 年 9 月 2 日星期二 12:58:45] [错误] [客户端 78.***.***.32] PHP 致命错误:require_once() [function.require]:打开失败需要'Zend/Loader.php ' (include_path='.:.:/usr/share/php5:/usr/share/php5/PEAR') 在第 6 行的 /srv/www/vhosts/example.co.uk/httpdocs/bootstrap.php

我什至不知道从哪里开始尝试解决这个问题。我的 PHP 知识水平处于中等水平,但就像我说的,我没有使用 Zend 的经验。此外,也不能联系原始开发者。

有趣的是,即使每次点击网站页面时都会运行代码,但错误只是偶尔发生。

我认为这一定与 include_path 有关,但我不确定。

【问题讨论】:

    标签: php zend-framework


    【解决方案1】:

    它只是偶尔发生的事实让我认为这与其说是一个编程问题,不如说是一个系统管理员问题——如果它是实现中的一个缺陷,你会认为它会一直失败,考虑到错误是“无此文件或目录”。两个猜测

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

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

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

    【讨论】:

      【解决方案2】:

      首先,我认为您的包含路径可能应该有一个斜杠。这是我的一个例子:

          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.php”并查看所有包含/需要此文件的位置。

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题,但问题在于文件的权限。我为所有 RWX 提供了 chmod,现在一切正常。

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

        问候

        【讨论】:

          【解决方案4】:

          它有时会起作用,所以在 PHP 端并没有任何本质上的错误(如果路径错误,它永远不会起作用......但它确实如此,是吗?)。那么是什么导致 Loader.php 定期无法访问?我怀疑是权限问题。使 Loader.php 或它所在的目录无法访问的东西。也许 cron 作业正在设置/重置权限?先检查一下。查看工作时的权限是什么,不工作时的权限是什么。

          【讨论】:

            【解决方案5】:

            就我而言,Zend/Loader.php 不在 PEAR 目录中。它应该在那里,但我的网络服务器有点原始。但是你也可以将它插入到 library/Zend 目录中。

            但这确实不能回答为什么您的问题只是偶尔出现。

            【讨论】:

              【解决方案6】:

              我在使用 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();
                      }
              ...
              

              【讨论】:

                猜你喜欢
                • 2018-05-08
                • 2013-12-25
                • 2012-03-20
                • 2013-07-16
                • 1970-01-01
                • 1970-01-01
                • 2020-05-12
                • 2020-01-28
                • 2010-11-30
                相关资源
                最近更新 更多