作为程序员一定要保持良好的睡眠,才能好编程

PHP如何及时输出,不用等待所有内容执行完

发布时间:2017-08-09

PHP有些程序执行时间很长,如果不及时输出,那么用户就一直看到的是空白,以为网站没有反应,也不知道现在在执行什么,需要及时输出给用户一些提示,展示现在正在做什么。PHP的输出缓存多层次控制,关键是从PHP到服务器之间的返回要及时输出,而非缓存到执行完毕。

如果web服务器使用的nginx,需要关闭gzip,proxy_buffering。最终才能及时输出

In nginx.conf:

. gzip off;

. proxy_buffering off;



  1. 在代码中设置及时输出   并开启

    @ini_set('implicit_flush',1);

    ob_implicit_flush(1);

  2. 清除缓存内容

    @ob_end_clean();

  3. 浏览器有缓存机制,如果收到内容少于1024个字节也不会及时输出,所以每次输出要保证输出内容达到1024个字节以上

    测试代码

    <?php

    @ini_set('implicit_flush',1);

    ob_implicit_flush(1);

    @ob_end_clean();

    for($i=0; $i<10; $i++){

        echo $i;

        //this is for the buffer achieve the minimum size in order to flush data

        echo str_repeat(' ',1024*64);

        sleep(1);

    }



切记  每一次的输出必须大于1024个字节