当前位置:首页 > 编程技术 > PHP编程 > 正文内容

php实现边执行边输出的效果

曾经5个月前 (05-07)PHP编程437

客户端的请求到web服务器,web服务器再调用PHP代码;

PHP返回内容到web服务器,web服务器再返回给客户端

边执行边输出就需要web服务器和PHP都不缓存内容

首先, Nginx不缓存PHP返回的内容

header('X-Accel-Buffering: no');//关闭nginx的缓存

其次,PHP不缓存,PHP不缓存有两种方式,

        注意: 不缓存也不是直接输出到客户端,而是转为等待输出,需要调用flush()

        一是修改配置文件php.in,修改output_buffering为0或Off 默认是4096(K)

output_buffering = 0
;或者
output_buffering = Off


  二是PHP代码中关闭

 
ob_end_flush();
//或者
ob_end_clean(); //与ob_end_flush类似, 
 
//二者区别: 在下次调用flush的时候, ob_end_clean不会输出在他之前echo/print的内容, 而ob_end_flush会

 三是获取buffer中的内容进行输出

ob_flush()


最后展示

header('X-Accel-Buffering: no');//关闭nginx的缓存
echo 'begin...<br>';
 
 
//方式1
ob_end_flush();//关闭缓存 数据不再存储到buffer区域中,变为等待输出状态
for($i = 1; $i <= 3; $i++)
{
    echo 'loading '.$i.'0%<br>';
    flush();//将等待输出的数据立刻输出到客户端
    sleep(1);
}
 
//方式2
ob_end_flush();//关闭缓存 数据不再存储到buffer区域中,变为等待输出状态
ob_implicit_flush(1);//打开绝对(隐式) 刷送。每次输出调用后有一次刷送操作,以便不再需要对 flush() 的显式调用。
for($i = 1; $i <= 3; $i++)
{
    echo 'loading '.$i.'0%<br>';
    sleep(1);
}
 
//方式3
for($i = 1; $i <= 3; $i++)
{
    echo 'loading '.$i.'0%<br>';
    ob_flush();//获取缓存区的内容,转为等待输出状态
    flush();//将等待输出的数据立刻输出到客户端
    sleep(1);
}


apache需要更改httpd.conf 的 FcgidOutputBufferSize 0


最详细的PHP flush()与ob_flush()的区别详解

详细介绍文档


扫描二维码推送至手机访问。

版权声明:本文由珍惜发布,如需转载请注明出处。

本文链接:https://www.zp68.com/article/59.html

分享给朋友:

“php实现边执行边输出的效果” 的相关文章

PHP将两个MP3文件进行合并,可以多个MP3文件合并

以下代码是基于PHP 7.x 的,版本小于7.x 的请自行将 代码中的__construct 改为 mp3<?php class mp3 { var $str; var $time; var $frames; // ...

最详细的PHP flush()与ob_flush()的区别详解

buffer ---- flush()buffer是一个内存地址空间,Linux系统默认大小一般为4096(1kb),即一个内存页。主要用于存储速度不同步的设备或者优先级不同的 设备之间传办理数据的区域。通过buffer,可以使进程这间的相互等待变少。这里说一个通俗一点的例子,你打开文本编辑器编辑一...

PHP中刷新输出缓冲

PHP中刷新输出缓冲buffer是一个内存地址空间,Linux系统默认大小一般为4096(1kb),即一个内存页。主要用于存储速度不同步的设备或者优先级不同的 设备之间传办理数据的区域。通过buffer,可以使进程这间的相互等待变少。这里说一个通俗一点的例子,你打开文本编辑器编辑一个文件的时候,你每...

php 使用curl_multi_init批量请求

抓取多个URL地址是Web开发中常见的需求,使用PHP的curl库可以简化这个过程。本文将详细介绍如何使用PHP的curl库同时请求多个URL地址,并提供具体的代码案例和注释。curl库介绍curl是一个常用的开源网络传输工具,可以通过各种协议(如HTTP、FTP、TELNET)在不同的平台上进行数...

PHP 多线程 curl_multi_init 的使用 PK curl_init 看看那个更快

php中可以通过CURL处理HTTP请求,其中curl_init()是单线程模式,如果需要对事务处理走多线程模式,那么就需要用到curl_multi_init()函数。本案例用来测试大并发的情况下 curl_multi_init() 到底比 curl_init() 快多少。话不多少,直接上...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。