我正在使用连接到远程服务的库。如果连接意外终止,该库将生成PHP致命错误/未捕获的错误异常。
我的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);
但无论我尝试什么,我都无法以任何方式影响退出代码。我在documentation找不到任何有用的内容。
是否有任何已知的方法在关闭函数内操作退出代码或在生成致命错误后通过其他方式操作?
答案 0 :(得分:1)
这是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),以查看错误是否确实已修复。