我继承了一个客户的网站,其崩溃,每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');

造成以下错误:

[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.此外,接触原始开发者是不是一种选择。

有趣的是,虽然代码是每次一个网站页面是命中的错误只是发生了。

我相信它必须是与包含路径下但我不是肯定的。

有帮助吗?

解决方案

一开始我认为你的包括路径也许应该具有后削减。这里是一个例子:

    set_include_path('../library/ZendFramework-1.5.2/library/:../application/classes/:../application/classes/excpetions/:../application/forms/'); 

你的引导文件将包括由另一个文件(大概一个index.php 文件)。这意味着,如果你的包括道路是相对的(如矿井),而不是绝对的,那么路径在哪Loader.php 是看起来的变化,如果该文件包括bootstrap.php 改变。

例如,我有两个index.php 文件在我Zend应用程序,一个用于前端,一个用于管理区域。这些指数的文件的每一个需要有自己的bootstrap.php 与不同的相对路径,因为它们包括通过不同的指数的文件,这意味着他们 必须要相对于原始请求索引的文件,不是引导文件,他们都是内定义.

这可以解释为什么你的问题是断断续续的,有可能是另一种文件包括引导地方,只是偶尔使用.我搜索过所有网站的文件'bootstrap.php'看看所有的地方包括/要求此文件。

其他提示

事实上,这只发生零星让我觉得这是更少的一种编程问题,和更多的系统管理员的问题-如果它是一个缺陷,在执行中,你会期望它以失败,一贯考虑到的错误是"没有这样的文件或目录"。两个猜测

  • 有多个前端网络服务器,而他们中的一个错误配置(缺失的Zend框架)。

  • 梨包括目录网络的安装,以及偶尔会消失的短期时间。

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

我有同样的问题,但问题是在权文件。我给chmod所有RWX和现在一切都好。

所以也许别人也会有同样的问题,因为我,然后这是解决方案。

关于

它的工作有时因此没有任何内在的错误在PHP端的事情(如果的道路是错误的,它将永远不会的工作。但它不是吗?).那么是什么造成的Loader.php 将定期无法访问的?我怀疑一个权限问题。东西是使Loader.php 或者目录,这是在无法访问。也许cron的工作是设置/重置的权限?检查第一次。看看有什么权限是当它的工作和他们是什么时候它不是。

在我的情况的Zend/Loader.php 是不是在梨目录。它应该在那里,但我的服务器是一个小小的原料。但你可以插入它在图书馆/Zend directory。

但事实上这并不是答案为什么你的问题只发生的时候。

我有这个错误以及当我还是工作进行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();
        }
...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top