Не удалось загрузить Zend / Loader.php. Пытаясь понять, почему? - PullRequest
2 голосов
/ 02 сентября 2008

Я унаследовал клиентский сайт, который падает каждые 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. Кроме того, связаться с разработчиком оригинала не вариант.

Интересно то, что, хотя код запускается каждый раз, когда страница сайта попадает, ошибка появляется время от времени.

Я полагаю, что это как-то связано с include_path, но я не уверен.

Ответы [ 6 ]

3 голосов
/ 02 сентября 2008

для начала я думаю, что ваш путь включения должен иметь косую черту. Вот мой пример:

    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» и увидел все места, в которых есть этот файл.

1 голос
/ 31 января 2009

У меня была такая же проблема, но проблема была в разрешении файлов. Я дал chmod для всех RWX и теперь все в порядке.

Так что, возможно, у кого-то еще будет такая же проблема, как и у меня, тогда это было решением.

Привет

1 голос
/ 02 сентября 2008

Тот факт, что это происходит только спорадически, заставляет меня думать, что это не столько проблема программирования, сколько проблема системного администратора - если бы это был дефект в реализации, вы бы ожидали, что он будет постоянно терпеть неудачу, учитывая, что ошибка " Данный файл или каталог отсутствует". Две догадки

  • Существует несколько интерфейсных веб-серверов, и один из них неправильно настроен (отсутствует Zend Framework).

  • Каталог PEAR include монтируется в сети и иногда исчезает на короткое время.

Это может быть более коварная проблема с файловой системой, но можно подумать, что это затронет не один файл.

0 голосов
/ 09 декабря 2010

У меня также была эта ошибка, когда я работал с PHPUnit 3.5.5. Мой основной скрипт приложения загрузил Zend Framework нормально, однако тестовый класс столкнулся с ошибками.

Мое решение заключалось в добавлении следующего к тестовому классу

   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();
        }
...
0 голосов
/ 14 мая 2010

В моем случае Zend / Loader.php не был в PEAR-каталоге. Это должно быть там, но мой веб-сервер был немного сырым. Но вы также можете вставить его в каталог library / Zend.

Но на самом деле это не отвечает, почему ваша проблема возникает только иногда.

0 голосов
/ 01 февраля 2009

Иногда это работает, поэтому нет ничего изначально неправильного в конце PHP (если путь неправильный, он никогда не будет работать ... но это так, да?). Так что же делает Loader.php периодически недоступным? Я бы заподозрил проблему с разрешениями. Что-то, что делает Loader.php или каталог, в котором он недоступен. Может быть, задание cron устанавливает / сбрасывает разрешения? Проверьте это сначала. Посмотрите, что разрешения, когда он работает, и что они есть, когда это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...