Не удалось загрузить Zend/Loader.php .Пытаюсь понять, почему?
-
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();
}
...