注册 登陆

    2019-10-04 16:23:34register_shutdown_function 使用场景介绍

    您现在的位置是: 首页 >  php >  register_shutdown_function 使用场景介绍

        register_shutdown_function(“callback_func”);

    参数为被调用的函数名

    当PHP程序异常结束时,会调用被注册的函数。

    异常结束包括:程序被强制终止,致命错误,运行完成后。

    PHP提供了三种方式来终止脚本执行:return,die,exit  

    php官网介绍:可以多次调用 register_shutdown_function() ,这些被注册的回调会按照他们注册时的顺序被依次调用。 如果你在注册的方法内部调用 exit(), 那么所有处理会被中止,并且其他注册的中止回调也不会再被调用。

    使用场景1:在记录日志的时候,可以有两种选择,直接去保存日志,可以通过register_shutdown_function,等待结束,执行保存log日志方法。

    //不立即发送
    if(!$sendNow){
        if(!$setShutdownSend){
            register_shutdown_function('ZGeneral::graylog');
            $setShutdownSend = 1;
        }
        return;
    }

    场景2:可以搭配php的error_get_last()函数,获取最后发生的错误,做一些处理。:

    场景3:使用该函数可以用来捕获致命错误并且在发生致命错误后恢复流程处理

    场景4register_shutdown_function()判断php是否执行完

    场景5:要做一个消费队列,因为某条有问题的数据导致致命错误,如果这条数据不处理掉,那么整个队列都会导致瘫痪的状态,这样可以用以下方法来解决。即:如果捕获到有问题的数据导致错误,则在回调函数中将这条数据处理掉就可以了。

      register_shutdown_function这个函数主要是用在处理致命错误的后续处理上(PHP7更推荐使用Throwable来处理致命错误),不过缺点也很明显,只能处理致命错误Fatal error,其他的错误包括最高错误Parse error也是没办法处理的。  

    fastcgi_finish_request也是在请求快结束的时候执行,这边介绍一下,不过执行和应用场景不同。

    调用fastcgi_finish_request这个方法后,再有任何输出内容,都不会输出到客户端 。方法被调用后,内容就会输出到客户端。而不需要输出到客户端的内容,可以放在此方法后。这样可以提高响应速度。当接口处理数据比较多的时候,或者更新大量数据的时候,可以提前返回信息到客户端,服务器继续执行。

关键字词: register_shutdown_function 使用场景介绍

0