<?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();
?>
*
*/

php Output Control 函数 ob_系列函数详解的更多相关文章

  1. Wordpress菜单函数wp_nav_menu各参数详解及示例

    Wordpress菜单函数wp_nav_menu各参数详解及示例   注册菜单 首先要注册菜单,将以下函数添加至function.php函数里   register_nav_menus(array( ...

  2. PHP函数call_user_func和call_user_func_array详解

    今天在群里面,有个叫lewis的在问call_user_func_array的用法,因为之前一直没有用过,也不能说什么,于是看一下手册,发现是这么写的: call_user_func_array (P ...

  3. JS函数动作分层结构详解及Document.getElementById 释义 js及cs数据类型区别 事件 函数 变量 script标签 var function

    html +css 静态页面 js     动态 交互   原理: js就是修改样式, 比如弹出一个对话框. 弹出的过程就是这个框由disable 变成display:enable. 又或者当鼠标指向 ...

  4. WordPress函数:get_bloginfo()用法详解

    描述 返回你博客的信息,这些信息可以用在任何地方的 PHP 代码中.这个函数,和 bloginfo() 一样,可以用来在模板文件的任何地方显示你博客的信息. 用法 <?php $bloginfo ...

  5. Delphi Format函数功能及用法详解

    DELPHI中Format函数功能及用法详解 DELPHI中Format函数功能及用法详解function Format(const Format: string; const Args: array ...

  6. 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程

    反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)   背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...

  7. SignalR新手系列教程详解总结(转)

    SignalR新手系列教程详解总结 GlobalHost.ConnectionManager.GetHubContext<TodoListHub>() .Clients.Clients(l ...

  8. Linux C 字符串函数 sprintf()、snprintf() 详解

    一.sprintf() 函数详解 在将各种类 型的数据构造成字符串时,sprintf 的强大功能很少会让你失望. 由于 sprintf 跟 printf 在用法上几乎一样,只是打印的目的地不同而已,前 ...

  9. 互斥量、条件变量与pthread_cond_wait()函数的使用,详解(二)

    1.Linux“线程” 进程与线程之间是有区别的,不过linux内核只提供了轻量进程的支持,未实现线程模型.Linux是一种“多进程单线程”的操作系统.Linux本身只有进程的概念,而其所谓的“线程” ...

随机推荐

  1. 移动终端app测试点总结

    以下所有测试最后必须在真机上完整的执行1.安装.卸载测试 在真机上的以及通过91等第三方的安装与卸载 安装在手机上还是sd卡上 2.启动app测试3.升级测试 数字签名.升级覆盖安装.下载后手动覆盖安 ...

  2. POJ1201 Intervals差分约束系统(最短路)

    Description You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. Write a p ...

  3. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 G. Garden Gathering

    Problem G. Garden Gathering Input file: standard input Output file: standard output Time limit: 3 se ...

  4. 同引擎mysql数据库转导快

    mysql数据库从一个表导入到另外一个表,数据库表引擎类型相同速度会快很多,相反,慢得离奇,5w,相同从myisam到myisam一或两分钟,从myisam到innodb要1到2个小时. [注意:最近 ...

  5. [笔记] Duke - 统计预测

    Duke大学富卡商学院(Fuqua school of business)的高级选修课. 全名:Statistical forecasting: notes on regression and tim ...

  6. Java 集合系列18之 Iterator和Enumeration比较

    概要 这一章,我们对Iterator和Enumeration进行比较学习.内容包括:第1部分 Iterator和Enumeration区别第2部分 Iterator和Enumeration实例 转载请 ...

  7. 【BZOJ】2693: jzptab

    http://www.lydsy.com/JudgeOnline/problem.php?id=2693 题意:求$\sum_{i=1}^{n} \sum_{j=1}^{m} lcm(i, j)$, ...

  8. usaco silver刷水~其实是回顾一下,补题解

    [BZOJ1606][Usaco2008 Dec]Hay For Sale 裸01背包 ;i<=n;i++) for(int j=m;j>=a[i];j--) f[j]=max(f[j], ...

  9. LINQ to Entities 事务简单例子

    默认LINQ to Entities会使用隐式事务,即:对于每一个savechanges都分开在单独的事务之中. 也可以显式地指定事务: using (var db = new TestEntitie ...

  10. mysql的小总结

    1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数 ...