zoukankan      html  css  js  c++  java
  • php Output Control 函数 ob_系列函数详解

    <?php
    /*
     * 输出缓冲控制
     * 
     * 
    flush — 刷新输出缓冲
    ob_clean — 清空(擦掉)输出缓冲区
    ob_end_clean — 清空(擦除)缓冲区并关闭输出缓冲
    ob_end_flush — 冲刷出(送出)输出缓冲区内容并关闭缓冲
    ob_flush — 冲刷出(送出)输出缓冲区中的内容
    ob_get_clean — 得到当前缓冲区的内容并删除当前输出缓。
    ob_get_contents — 返回输出缓冲区的内容
    ob_get_flush — 刷出(送出)缓冲区内容,以字符串形式返回内容,并关闭输出缓冲区。
    ob_get_length — 返回输出缓冲区内容的长度
    ob_get_level — 返回输出缓冲机制的嵌套级别
    ob_get_status — 得到所有输出缓冲区的状态
    ob_gzhandler — 在ob_start中使用的用来压缩输出缓冲区中内容的回调函数。ob_start callback function to gzip output buffer
    ob_implicit_flush — 打开/关闭绝对刷送
    ob_list_handlers — 列出所有使用中的输出处理程序。
    ob_start — 打开输出控制缓冲
    output_add_rewrite_var — 添加URL重写器的值(Add URL rewriter values)
    output_reset_rewrite_vars — 重设URL重写器的值(Reset URL rewriter values)
     * 
     * 
     * 
     */
    
    /*
     * 
    前言,好多人说ob系列函数是来做缓存用的其实并不是,相反如果在执行代码的时候反而会增加一层代码缓存执行
    在php.ini里面默认是不打开output_buffering这个选项,因为会损失php性能
    打开了php输出缓存: echo,print -> php output_buffring -> server buffering ->browser buffering -> browser display
    未打开php输出缓存: echo,print -> server buffering -> browser buffering ->browser display
    
    ob_start()会自动开启此功能,chunk_size 也就是输出缓冲区大小默认是4096也就是4KB
    bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )
     * chunk_size默认值 0 意味着函数仅在最后被调用
    也是可以自己设置php缓冲区大小的,也是可以调用回调函数,个人觉得这个才是最大的用处
    
    浏览器的输出缓存:IE为256Bytes, Chrome与FireFox为1000Bytes,也就是说ie有256KB缓存之后才会显示,同理,但是现在实际大小是多少,没有测试
    
    但是对于实现页面静态化的确是很不错的工具,下面会有一个简单的demo
    
    
    
     * 
     * 
     */
    
    
    
     
    //ob_implicit_flush(true);  
    ////echo str_pad(" ", 256);//填充到256KB
    ////ob_start();
    //for ($i=10; $i>0; $i--) {  
    //   echo $i;  
    //   ob_flush();  
    //   sleep(1);   
    //} 
    //这样你就会看到倒数到5的时候才会打印剩余的数字,不然一直会出现缓冲,不会打印出任何东西,测试时在chrome下测试,ie效果不明显
    //当你开启ob_start()的时候,默认缓冲区是4KB,我们打印的数据不足4k,所以会缓冲然后在一次性显示出现
    //不手动开启,你就会发现,当缓冲区数据满了之后才会不间断输出
    
    
    
    
    
    //flush(),ob_flush(),ob_end_flush()
    //flush只是冲刷出缓冲区数据。ob_flush()也可以冲刷出缓冲区数据,但是会吧缓冲区数据丢弃,可以再次把数据放入缓冲器的数据再次冲刷出来,多次利用
    //ob_end_flush()是冲刷出来之后就会销毁缓冲区
    
    //ob_implicit_flush() 将打开或关闭绝对(隐式)刷送。绝对(隐式)刷送将导致在每次输出调用后有一次刷送操作,以便不再需要对 flush() 的显式调用
    
    //ob_start();
    //echo "sssssssssssssssss";
    //echo '<br>';
    //echo '<br>';
    //echo $e = ob_get_contents();//获得缓冲区内容
    //echo $len1 = ob_get_length();//50,获取缓冲区长度
    //echo '<br>';
    //echo ob_get_level();//返回嵌套的输出缓冲处理程序的级别;或者是,如果输出缓冲区不起作用,返回零
    //echo '<br>';
    //print_r(ob_list_handlers());
    //ob_flush();
    
    
    
    //ob_start();
    //echo 'zzzzzzzzzzzzzzzzzzz';
    //echo '<br>';
    //echo '<br>';
    //echo $e = ob_get_contents();
    
    //echo ob_get_flush();//刷出(送出)缓冲区内容,以字符串形式返回内容,并关闭输出缓冲区
    
    //ob_clean();//清除缓冲区内容,打印不出来
    
    //$g =ob_get_status();
    //var_dump($g);
    //ob_end_clean();
    
    
    
    
    //output_add_rewrite_var — 添加URL重写器的值(Add URL rewriter values)
    //此函数给URL重写机制添加名/值对。 这种名值对将被添加到URL(以GET参数的形式)和表单(以input隐藏域的形式),
    //当透明URL重写用 session.use_trans_sid 开启时同样可以添加到session ID。 要注意,绝对URL(http://example.com/..)不能被重写。 
    //此函数的行为由url_rewriter.tags php.ini 参数控制。 
    //如果还没有活跃的输出缓冲区,调用此函数将隐式地开启它
    
    //output_add_rewrite_var ( 'var' ,  'value' );
    //// some links
    //echo  '<a href="file.php">link</a>
    //<a href="http://www.baidu.com">link2</a>' ;
    //// a form
    //echo  '<form action="script.php" method="post">
    //<input type="text" name="var2" />
    //</form>' ;
    //
    //print_r(ob_list_handlers());
    
    //点击link时候,连接就成了 file.php?var=value    form提交到script.php的时候在连接会额外加上script.php?var=value
    //和hidden域的使用方式类似
    
    
    
    
    
    /*
    
    function  callback ( $info )
    {
       return ( str_replace ( "zx" ,  "bb" ,  $info ));
       //注意,如果需要全部静态页面类似dedecms这个思路,如果全部生成了静态页面之后,吧所有的页面执行一次就可以吧静态页面生成
       //在你设计生成目录和文件名称规则的时候,要和你在这里替换网页里面的动态url成为静态的url风格一致,不然替换的正则表达式会很复杂
    }
    //ob_flush();
    ob_start("callback");
    ?>
    
    <html>
        <head>
            <title>页面静态化思路实现 </title>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8">
        </head>
    <body>
    <p>It's like comparing zx to oranges.</p>
    </body>
    </html>
    
    
    <?php
    $info = ob_get_contents();//获得缓冲区内容
    //例如这个是产品页面,产品id是15,分类是product ,添加日期实践戳date格式化2015
    //是正常的程序分类,产品ID,添加日期,都是变量可以在数据库查询出来
    
    $dir = "./product/".date("Y-m-d",time());
    if(!is_dir($dir)){
        
        mkdir($dir,0777,true);//true递归创建文件夹,创建的时候是ANSI编码,只要在html页面给编码格式就不会乱码
    }
    if(!file_exists($dir."/15.html")){
        
       $file=fopen($dir."/15.html",'w');
       fwrite($file,$info); //写入信息到info.txt
       fclose($file); 
        
    }  else {
        echo 'already exits';
    }
    //ob_end_clean();
    ob_flush();
    ?>
     * 
     */
  • 相关阅读:
    韦到头打印链表
    字符串替换
    二维数组中的查找
    字符串加解密
    简单密码破解
    vue中store模块化
    使用requests抓取网页内容
    PyQt中的一些小问题
    微信公众号之Token验证
    编译BOOST中的PYTHON模块
  • 原文地址:https://www.cnblogs.com/zx-admin/p/4368862.html
Copyright © 2011-2022 走看看