Я использую библиотеку, которая подключается к удаленному сервису. Библиотека сгенерирует PHP Fatal error / Uncaught ErrorException в случае неожиданного прекращения соединения.
Мой PHP-скрипт работает как демон (через Systemd), поэтому я хотел бы через некоторое время автоматически перезапустить демон для повторного подключения. Все это настраивается в Systemd, поэтому, если PHP выходит со статусом 4, демон будет перезапущен через некоторое время.
PHP использует код выхода 255 по умолчанию для фатальных ошибок, поэтому я решил использовать функцию выключения, подобную следующей:
function shutdown() {
// Do a bit of this and that (e.g. assert
// there actually was the relevant error)
exit(4);
}
register_shutdown_function('shutdown');
trigger_error('Test', E_USER_ERROR);
Но что бы я ни пытался, я никак не могу повлиять на код выхода. Я не нашел ничего полезного в документация.
Есть ли какой-либо известный способ манипулировать кодом выхода в функции завершения работы или другими способами после того, как фатальная ошибка уже сгенерирована?
Это ошибка в PHP, которая, по-видимому, была подана несколько раз за эти годы:
https://bugs.php.net/bug.php?id=65275
https://bugs.php.net/bug.php?id=62725
https://bugs.php.net/bug.php?id=62294
https://bugs.php.net/bug.php?id=23509
Предполагается, что это уже исправлено, но в PHP 5.5.30 я все еще испытываю это сам.
Я полагаю, вы можете попробовать вернуться к PHP 5.3, который, как сообщается, работал как положено. Или вы можете проверить один из самых последних выпусков (5.6.18 или 7.0.3 на этот ответ), чтобы увидеть, действительно ли исправлена ошибка.
Других решений пока нет …