Не удалось загрузить Zend / Loader.php. Пытаюсь понять, почему?

Я унаследовал клиентский сайт, который дает сбой каждые 3 или 4 дня. Он построен с использованием zend-framework, о котором я ничего не знаю.

Следующий код:

<?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, но я не уверен.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
37 405
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

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

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

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

Ответ принят как подходящий

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

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

Ваш загрузочный файл будет включен другим файлом (возможно, файлом index.php). Это означает, что если ваш путь включения относительный (как у меня), а не абсолютный, то путь, по которому выполняется поиск Loader.php, изменяется при изменении файла, включающего bootstrap.php.

Например, в моем приложении Zend есть два файла index.php: один для интерфейса пользователя, а другой - для области администрирования. Каждому из этих индексных файлов нужен собственный bootstrap.php с разными относительными путями, потому что они включены в разные индексные файлы, что означает, что они должны относиться к исходному запрошенному индексному файлу, а не к файлу начальной загрузки, в котором они определены..

Это могло бы объяснить, почему ваша проблема периодически возникает: где-то может быть другой файл, включающий загрузочную программу, который используется только изредка. Я бы просмотрел все файлы сайтов для 'bootstrap.php' и посмотрел все места, которые включают / требуют этот файл.

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

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

С Уважением

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

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

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

У меня тоже была эта ошибка, когда я работал с 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();
        }
...

Другие вопросы по теме