2

我继承了一个每 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 有关,但我不确定。

4

6 回答 6

3

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

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

于 2008-09-02T12:35:03.197 回答
1

它只是偶尔发生的事实让我认为这不是一个编程问题,而更像是一个系统管理员问题 - 如果它是实现中的一个缺陷,你会认为它会一直失败,考虑到错误是“没有这样的文件或目录”。两种猜测

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

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

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

于 2008-09-02T12:27:00.203 回答
1

我有同样的问题,但问题是文件的权限。我为所有 RWX 提供了 chmod,现在一切都很好。

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

问候

于 2009-01-31T12:21:39.303 回答
0

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

于 2009-01-31T21:03:43.197 回答
0

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

但实际上这并不能回答为什么您的问题只在某些时候出现。

于 2010-05-14T10:13:32.110 回答
0

当我使用 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();
        }
...
于 2010-12-09T17:35:34.417 回答