zoukankan      html  css  js  c++  java
  • php缓存控制

    今天同事说需要在浏览器及时打印出现在正在执行任务的信息,但又不能一口气的把所有的信息全部echo出来。因为程序需要执行2-3个小时才能结束。

    这个功能其实也很好做。使用php自带的ob系列函数就可以了。

    我实现的代码如下:

    1 //先填充好buffer,防止需要及时输出的东西被放到了buffer中去 start
    2 ob_start();
    3 $buffer_size = ini_get('output_buffering');//获得缓冲区大小
    4
    5 for($i=0;$i<(int)$buffer_size;$i++){
    6 echo ' ';
    7 }
    8 ob_flush();
    9 flush();
    10 //先填充好buffer,防止需要及时输出的东西被放到了buffer中去 end
    11
    12 //下面为需要及时输出的内容
    13 for($i=1;$i<=10;$i++){
    14 echo $i,'<Br />';
    15 ob_flush();
    16 flush();
    17 sleep(1);
    18 }

    每秒打印1个字符。共打印十个数字。

    这个效果在ff、ie8下都很好。但是在ie6下,第一次执行的时候确实等了10多秒一下在打印出来的。再次刷次页面的时候才和ff、ie8的效果一直。

    我想这个情况是因为ie6浏览器自带缓冲区导致的问题。可是又不知道怎么解决。于是在www上搜索了一下。原来真的是这样的。网上有位哥们说

    “IE的某些版本只有在字符串缓冲到256字节的时候才会将缓冲内容输出到浏览器上”。

    于是我修改了上面的代码为:

    1 //先填充好buffer,防止需要及时输出的东西被放到了buffer中去 start
    2  ob_start();
    3
    4  function isIE6(){
    5 $agent = $_SERVER['HTTP_USER_AGENT'];
    6 return (stripos($agent, 'MSIE 6.0') !== false);
    7 }
    8
    9  $buffer_size = ini_get('output_buffering');//获得缓冲区大小
    10
    11 //如果是IE6 需要加上256,因为在某些ie6版本下 ie6浏览器自己有256的缓冲区
    12 if (isIE6()) {
    13 $buffer_size = (int)$buffer_size + 256;
    14 }
    15
    16 for($i=0;$i<(int)$buffer_size;$i++){
    17 echo ' ';
    18 }
    19 ob_flush();
    20 flush();
    21 //先填充好buffer,防止需要及时输出的东西被放到了buffer中去 end
    22
    23 //下面为需要及时输出的内容
    24 for($i=0;$i<10;$i++){
    25 echo $i,'<Br />';
    26 ob_flush();
    27 flush();
    28 sleep(1);
    29 }

    执行下。ok!!

    谨此为记。

    参考:http://www.iefans.net/ie-php-huanchong-kongzhi/

  • 相关阅读:
    TensorRT推理加速基于Tensorflow(keras)的uff格式模型(文件准备)
    pandas_format06
    docker01
    pandas_dataformat03
    pandas_dataformat02
    pandas_series04
    pandas_format05
    pandas_format04
    pandas_dataframe01
    pandas_series03
  • 原文地址:https://www.cnblogs.com/ainiaa/p/1978011.html
Copyright © 2011-2022 走看看