и особенно этот, где hipertrtacker говорит, что Register_shutdown_function может перехватывать фатальные ошибки, а Питер Мортенсен показал код, очень похожий на мой собственный.
Может кто-нибудь объяснить, почему следующий урезанный код не вызывает мою функцию Shutdown() при завершении работы? Совершил ли я где-нибудь непреднамеренную ошибку в коде?
(Примечание: фактическая функция Shutdown() в реальном скрипте регистрирует debug_backtrace() и другие данные, чтобы узнать, куда я попал, когда получаю ошибку тайм-аута сервера)
Я намеренно устанавливаю тайм-аут равным 1 с, а затем зацикливаюсь до тех пор, пока сценарий не завершится из-за ошибки тайм-аута.
Ожидаемое поведение
- Файл x_log.txt будет содержать слово «Начало», за которым следуют около 85 000 строк с «циклом», за которым следует строка с «Вызов завершения работы».
- Не должно быть строки со словом «Конец», поскольку мы завершили работу из-за преднамеренной ошибки до того, как дошли до этого места.
/> - В журнале error_log будет показана строка «Неустранимая ошибка PHP: превышено максимальное время выполнения в 1 секунду в /home/aaaaaa/public_html/x.php в строке 11».
- Файл x_log.txt содержит слово «Начало», за которым следуют около 85 000 строк с «зацикливается», но ничего больше.
- В журнале error_log отображается строка «Неустранимая ошибка PHP: максимальное время выполнения в 1 секунду превышено в /home/aaaaaa/public_html/x.php в строке 11».
Похоже, что функция Shutdown() не вызывается для записи в журнал «Вызов завершения работы».
Вопрос
Что я делаю неправильно и как я могу заставить этот фрагмент кода работать правильно и вызывать функцию завершения работы даже при завершении работы из-за ошибки?
Среда
- Я вызываю x.php из браузера, используя URL-адрес https://www.aaaaaa.tech/x.php
- Это общий сервер (поэтому я не могу получить доступ к php.ini или любому другому административному материалу)
- Я использую PHP версии 8.1.33
Подробнее здесь: https://stackoverflow.com/questions/798 ... m-an-error
Мобильная версия