我正在使用连接到远程服务的库。 如果连接意外终止,库将生成PHP致命错误/未捕获的错误异常。
我的PHP脚本作为守护进程运行(通过Systemd),所以我想在一段时间后自动重启守护进程以重新连接。 所有这些都是在Systemd中设置的,因此如果PHP以状态4退出,则守护程序将在一段时间后重新启动。
PHP默认使用退出代码255来处理致命错误,因此我决定使用类似于以下内容的shutdown函数:
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),以查看错误是否确实已修复。
谢谢,我一直在考虑自己打开一个错误报告。 如果没找到你联系的那些人,他们就是一个很好的起点。
顺便说一下:我已经在使用PHP 7.0.3了,所以......
那么,我想我不会屏住呼吸......