Я переместил файл в нашей системе в подпапку для организации, что, в свою очередь, нарушило относительный путь оператора require
. Это должно было привести к предупреждению E_COMPILE_ERROR
. Однако вместо этой ошибки наш пользовательский обработчик ошибок в приложении перехватил ошибку как E_WARNING
. Итак, наш клиентский обработчик зарегистрировал сообщение, и результирующий PHP-экран оказался пустым, как если бы был запущен die();
. Вот журнал, созданный нашим локальным обработчиком:
E_WARNING main(XXXXXX.php): failed to open stream: No such file or directory xxx/xxx.php Line 9 01-26-2012 09:44:27 AM 01-26-2012 10:03:24 AM
Возможно, важно отметить, что наша система все еще использует старый бедный PHP 4
.
Любая идея, почему require выдает E_WARNING? Это заняло немного больше времени, чтобы выяснить, в чем проблема, так как мы не могли видеть никаких сообщений об ошибках.
Изменить: приложение определенно требовало. Пользовательский обработчик ошибок просто использует функцию PHP set_error_handler. Поэтому его не следует вызывать ни для чего, кроме предупреждений, уведомлений и пользовательских ошибок.
Дополнительное редактирование:
Может быть, структура как-то связана с этим? Вот как это работает: (-> значит включает, => значит требует)
главная->Файл1.php=>Файл2.php
Выдает ли предупреждение, потому что File1.php включен, но не требуется? Это может иметь смысл для меня, но может показаться, что это глюк? Мне может понадобиться проверить это на PHP 5.
РАЗРЕШЕНИЕ
Я просмотрел наше приложение и нашел это:
error_reporting (E_ERROR | E_WARNING | E_PARSE);
Поэтому E_COMPILE_ERROR не появится. Кроме того, @DaveRandom прав в том, что он выдает предупреждение, а затем выдает фатальную ошибку.
Изменение его на error_reporting(E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); показывает сообщение об ошибке.