PHP Zend Framework: внутренняя ошибка сервера 500 на локальном хосте при попытке запустить Lucene.php в браузере

Я использую Windows 7, и у меня есть новая установка Zend Framework. В новом файле php с именем «search.php» я пытаюсь создать приложение поиска, используя Zend_Search_Lucene, первая строка которого:

<?php require_once "C:...\Zend\Search\Lucene.php";?>

То, что я вижу в браузере, когда запускаю этот код, — это внутренняя ошибка сервера 500. Затем я обнаружил, что получаю эту ошибку всякий раз, когда пытаюсь запустить некоторые файлы в библиотеке Zend самостоятельно, и это вызвало ошибку, о которой я упоминал. .ie ОШИБКА 500 на localhost/Zend/Search/Lucene.php, localhost/Zend.../blabla.php..

Однако некоторые файлы не отображали эту ошибку сервера 500 при запуске в браузере. то есть: localhost/Zend/ProgressBar.php показывает пустую страницу, и это нормально, поскольку я предполагаю, что в коде нет никаких «эхо». На самом деле это то, что я ожидал, когда запускал lucene.php в браузере...

Может кто-нибудь опытный, подскажите, как такое может быть? Почему я получаю внутреннюю ошибку сервера вместо исключения? Как проверить правильность работы моего поискового приложения, использующего файл «Lucene.php», независимо от этой внутренней ошибки сервера 500? благодаря.


person Benny Tjia    schedule 07.06.2011    source источник


Ответы (4)


Попробуйте включить отчеты об ошибках:

на лету

ini_set('display_errors', 1);
error_reporting(E_ALL);

в php.ini (вероятно, отличается для php и cli)

error_reporting = E_ALL
display_errors = 1

Для получения дополнительной информации см.:

person Arend    schedule 07.06.2011

Наконец-то я решил проблему :) После просмотра трассировок ошибок внутренняя ошибка сервера связана с тем, что код <?php require_once "C:...\Zend\Search\Lucene.php";?> пытается получить доступ к определенному коду внутри "Lucene.php", который содержит относительный путь к папке библиотеки Zend =require_once('Zend\Search\Document\...'); и сервер не знает путь к файлу. Что нужно было исправить, так это мой файл php.ini, в include_path я добавил ;C:\php5\pear;C:\Server\www\.....\ZendFramework\library.. Теперь он показывает пустую страницу вместо внутренней ошибки сервера.

+1 @Arend: функция сообщения об ошибках действительно полезна! Благодарность

person Benny Tjia    schedule 07.06.2011

Код Zend полагается на их автозагрузчик. Вы получаете сообщение об ошибке, поскольку вы не инициализируете его, а затем в Zend_Search_Lucene он пытается создать экземпляр несуществующего класса.

Это должно помочь:

require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();
self::$zendLoaded = true;
person Maerlyn    schedule 07.06.2011
comment
Я добавил ваш код в свой файл php, и он по-прежнему выдает ту же внутреннюю ошибку сервера. Однако, как я уже сказал, Loader.php сам по себе отлично работает в браузере (показывает белую пустую страницу) - person Benny Tjia; 07.06.2011
comment
Загрузчик сам по себе просто определяет класс, больше ничего не делает. Не зря работает (показывает пустую белую страницу с http 200). Включите display_errors и повторите попытку. - person Maerlyn; 07.06.2011

Поскольку я не могу комментировать ответы, я повторно использую код Мерлина:

require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();

self::$zendLoaded = true; не может работать, так как self не определена ей.

Согласно документации ZF, если ваш путь указан правильно, этих 2 строк должно быть достаточно.

person ant1j    schedule 07.06.2011