php 注册脚本完成后方法,并执行耗时任务

2020-10-31
<?php
//注册一个会在php中止时执行的回调函数,回调会在脚本执行完成或者exit()后被调用。
function aa()
{
register_shutdown_function('bb');
return 123;
}

function bb()
{
 echo 123456;
}

echo aa();

/*输出结果为:
int(123)
123456
*/

//注册其他类的函数,将类与方法名组成一个数组作为一个参数,如果方法需要传参,那么将参数依次放在数组后面
class a
{
    public function aa($a,$b)
    {
        echo $a;
        echo $b;
        echo 456789;
    }
}

function aa()
{
    register_shutdown_function([new a,'aa'],'bb','cc');
    return 111;
}

/*输出结果为:
'bb'
'cc'
456789
*/

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

function aa()
{
    register_shutdown_function([new a,'aa'],'bb','cc');
    echo 111;
    fastcgi_finish_request();
}
/*输出111后,register_shutdown_function()注册的方法将在后台运行,
fastcgi_finish_request()的作用是将此方法后面的代码在后台运行,此方法仅在linux系统上可用
*/

 

{/if}