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

StackOverflow https://stackoverflow.com/questions/39364

  •  09-06-2019
  •  | 
  •  

Вопрос

Я унаследовал клиентский сайт, который выходит из строя каждые 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, но я не уверен.

Это было полезно?

Решение

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

    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 Framework).

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

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

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

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

С уважением

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

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

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

У меня также была эта ошибка, когда я работал с 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();
        }
...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top