Я переместил файл в нашей системе в подпапку для организации, которая, в свою очередь, сломала относительный путь оператора require
. Это должно было привести к предупреждению E_COMPILE_ERROR
. Однако вместо этой ошибки наш пользовательский обработчик ошибок в приложении поймал ошибку как E_WARNING
. Итак, наш обработчик клиента зарегистрировал сообщение, и полученный в результате экран PHP оказался пустым, как если бы был запущен die();
. Вот журнал, созданный нашим местным обработчиком:PHP require statement - Сбой, но выбрасывает E_WARNING вместо E_COMPILE_ERROR
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
.
Любая идея, почему требуется, должна была бы выбросить E_WARNING? Это заняло немного больше времени, чтобы понять, в чем проблема, поскольку мы не смогли увидеть сообщение об ошибке.
Редактировать: Приложение, безусловно, требовало. Пользовательский обработчик ошибок просто использует функцию set_error_handler PHP. Поэтому его не следует вызывать ничем, кроме предупреждений, уведомлений и ошибок пользователя.
Дополнительная Edit:
Может быть структура имеет что-то делать с этим? Вот как его работы: (-> средство включает в себя => означает, что требуется)
Main-> File1.php => File2.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); показывает сообщение об ошибке.
Не видя своего пользовательского обработчика ошибок, вы не можете сказать. неудавшееся требование должно выплевывать ошибку компиляции, но поскольку вы выполняете обычную работу, убедитесь, что она фактически работает (не работает?) правильно. –
убедитесь, что у вас нет знака @ в вашем требовании, который подавляет отчет об ошибках. – ncank