fatal error:php中通过register_shutdown_function记录fatal error
程序员文章站
2023-12-21 22:39:52
...
今天发现php中,如果要记录fatal error的时候,可以实用一个不错的函数,
叫register_shutdown_function,小结如下:
register_shutdown_function可以让我们设置一个当执行关闭时可以被调用的另一个函数.也就是说当我们的脚本执行完成或意外死掉 导致PHP执行即将关闭时,我们的这个函数将会被调用.所以,我们可以使用在脚本开始处设置一个变量为false,然后在脚本末尾将之设置为true的方 法,让PHP关闭回调函数检查脚本完成与否. 如果我们的变量仍旧是false,我们就知道脚本的最后一行没有执行,因此它肯定在程序执行到某处死掉了;
例子如下:
叫register_shutdown_function,小结如下:
register_shutdown_function可以让我们设置一个当执行关闭时可以被调用的另一个函数.也就是说当我们的脚本执行完成或意外死掉 导致PHP执行即将关闭时,我们的这个函数将会被调用.所以,我们可以使用在脚本开始处设置一个变量为false,然后在脚本末尾将之设置为true的方 法,让PHP关闭回调函数检查脚本完成与否. 如果我们的变量仍旧是false,我们就知道脚本的最后一行没有执行,因此它肯定在程序执行到某处死掉了;
例子如下:
- ?php
- $clean = false;
- function shutdown_func(){
- global $clean;
- if (!$clean){
- die("not a clean shutdown");
- }
- return false;
- }
- register_shutdown_function("shutdown_func");
- $a = 1;
- $a = new FooClass(); // 将因为致命错误而失败
- $clean = true;
- ?>
- 再来一个记录fatal error的例子
- function catch_fatal_error()
- {
- $last_error = error_get_last();
- // 检查是否属于fatal_error
- if(isset($last_error['type']) &&$last_error['type']==E_ERROR)
- {
- //相关的处理
- }
- }
- register_shutdown_function('catch_fatal_error');
注意的是;
1,register_shutdown_function()函数可重复调用,但执行的顺序与注册的顺序相同
2,如果在调用register_shutdown_function()函数之前有exit()函数调用,register_shutdown_function()函数将不能执行
3,PHP4后支持注册函数参数传递
4,在某些服务端,如Apache,当前目录在register_shutdown_function()函数中能够改变
5,register_shutdown_function()函数执行在headers发送之后
推荐阅读
-
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
-
php运行提示:Fatal error Allowed memory size内存不足的解决方法
-
[PHP] error_reporting(0)可以屏蔽Fatal error错误
-
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function【转】
-
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
-
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
-
PHP捕获Fatal error错误的方法
-
在Linux中修复“fatal error: x264.h: No such file or directo”错误的方法
-
Fatal error: 'break' not in the 'loop' or 'switch' context in Function.php
-
Windows平台的 PHP 报错 Fatal error: Class COM not found in 的解决方法