fastcgi_finish_request() 的用法
fastcgi_finish_request 可以结束客户端的连接,但是php执行继续执行。意思是程序执行到 fastcgi_finish_request 后,缓冲区的内容发给客户端,然后结束和客户端的连接。但是程序将继续执行,之后的输出将不会发送给客户端。
wordpress 中的 wp-cron.php 中的代码
ignore_user_abort( true );
/* add code 1 */
echo "runing...";
/* Don't make the request block till we finish, if possible. */
if ( function_exists( 'fastcgi_finish_request' ) && version_compare( phpversion(), '7.0.16', '>=' ) ) {
if ( ! headers_sent() ) {
header( 'Expires: Wed, 11 Jan 1984 05:00:00 GMT' );
header( 'Cache-Control: no-cache, must-revalidate, max-age=0' );
}
fastcgi_finish_request();
}
/* add code 3 */
echo "runing 2...";
/* add code 3 */
file_put_contents(__DIR__ . '/xx.txt', date("Y-m-d"));
if ( ! empty( $_POST ) || defined( 'DOING_AJAX' ) || defined( 'DOING_CRON' ) ) {
die();
}
可以看到 , 执行后 的结果。
- runing ... 可以输出
- 当前文件会生成 xx.txt 文件
- runing 2 ... 不会被输出
这个有什么用
可以提高网站的相应速度,比如网站有个需求,用户提交信息后,你需要发送一份邮件。就完全可以把发送邮件这部分代码放到 fastcgi_finish_request 以后,因为发送邮件还是一个比较耗时的任务。