返回首页

在PHP的fastcgi_finish_request魔法

时间:2018-10-07 17:39
   听起来有点茫然。让我们举几个例子来解释。
复制代码代码如下所示:
< PHP
回声的例子;
fastcgi_finish_request();
echo'to是,或不是,这是个问题。;
file_put_contents('log .txt、生存还是毁灭,这是一个问题。);
>

通过浏览器(不是命令行!)运行这个脚本,结果是相应的字符串是不输出,但相应的文件生成的。这表明,在调用fastcgi_finish_request,客户端的响应,但服务器脚本继续运行在同一时间。
合理使用这个功能可以大大提高用户体验,趁热打铁。另一个例子:
复制代码代码如下所示:
< PHP
回声的例子;
file_put_contents('log .txt,日期('y-m-d H:我:S)。上传视频
fastcgi_finish_request();
睡眠(1);
file_put_contents('log .txt,日期('y-m-d H:我:S)。转换格式
睡眠(1);
file_put_contents('log .txt,日期('y-m-d H:我:S)。提取图片
>



该代码使用睡眠来模拟一些耗时的操作,而不是在浏览时阻塞,程序已经执行,日志也被执行。

在一个提醒的结束,在雅虎最佳实践加速网站的刷新缓冲区早期提到的,即冲洗PHP方法在使用的内容发送到客户端,尽快,虽然表面上看,fastcgi_finish_request有些相似,但本质上是不同的,不要混淆。

转载后记:我这样看,在通话的时候,会发一个回应,但是没有关闭连接。PHP操作的结束。与呼叫冲水相比,或者在加速你的回声之前,这种方法可以更简单。

此外,从代码的可移植性方面,您可以在代码中附加以下代码:
复制代码代码如下所示:
如果(!function_exists(fastcgi_finish_request )){
功能fastcgi_finish_request(){ }
}

它不会导致代码部署在非FPM环境引起的问题。
------分隔线----------------------------
推荐内容