Я унаследовал клиентский сайт, который разбивается каждые 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');
Вызывает следующую ошибку:
[Вт Сен 02 12:58:45 2008] [ошибка] [клиент 78. ***. ***. 32] PHP Предупреждение: require_once (Zend / Loader.php) [function.require-once]: не удалось открыть stream: Нет такого файла или каталога в /srv/www/vhosts/example.co.uk/httpdocs/bootstrap.php в строке 6 [Вт Сен 02 12:58:45 2008] [ошибка] [клиент 78. ***. ***. 32] PHP Неустранимая ошибка: require_once () [function.require]: Не удалось выполнить открытие «Zend / Loader.php '(include_path ='.:.: / usr / share / php5: / usr / share / php5 / PEAR ') в /srv/www/vhosts/example.co.uk/httpdocs/bootstrap.php в строке 6
Я даже не знаю, с чего начать исправлять это. Мой уровень знаний о PHP является промежуточным, но, как я уже сказал, у меня нет опыта работы с Zend. Кроме того, обращение к оригинальному разработчику не является вариантом.
Интересно, что, хотя код запускается каждый раз, когда страница сайта попадает, ошибка происходит только время от времени.
Я считаю, что это должно быть связано с include_path, но я не уверен.
для начала я думаю, что ваш путь включения должен иметь конечную косую черту. Вот мой пример:
set_include_path('../library/ZendFramework-1.5.2/library/:../application/classes/:../application/classes/excpetions/:../application/forms/');
Файл bootstrap будет включен другим файлом (возможно, файл index.php). Это означает, что если ваш путь include относительный (как мой), а не абсолютный, то путь, по которому Loader.php ищет изменения, если изменяется файл, включающий bootstrap.php.
Например, у меня есть два файла index.php в моем приложении Zend, один для внешнего интерфейса и один для области администрирования. В этих индексных файлах каждый из них нуждается в собственном bootstrap.php с разными относительными путями, потому что они включаются в различные файлы индекса, а это значит, что они должны быть относительно исходного запрашиваемого индексного файла, а не файла начальной загрузки, который они определены внутри .
Это может объяснить, почему ваша проблема прерывистая, может быть другой файл, в том числе загрузочный, где-то, который используется только иногда. Я проверил все файлы сайтов для «bootstrap.php» и просмотрел все места, которые включают / требуют этот файл.
Тот факт, что это происходит только спорадически, заставляет меня думать, что это проблема программирования, и проблема с sysadmin – если бы это был дефект в реализации, вы ожидаете, что он будет неуспешно, учитывая, что ошибка: «Нет такого файла или каталог ". Два догадки
Существует несколько интерфейсных веб-серверов, один из которых неправильно настроен (отсутствует Zend Framework).
Каталог PEAR включает в себя сетевую систему и иногда исчезает в течение коротких промежутков времени.
Это может быть более коварная проблема файловой системы, но можно подумать, что это повлияет не только на один файл.
У меня была та же проблема, но проблема была в разрешении на файлы. Я дал 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(); } ...