星联网络专注帝国CMS二次功能插件开发-精品网站模板站长代码素材

  • 最近更新
  • 模板:33
  • 记录:12641|
  • 插件:52|
  • 工具:4|
  • 代码:8|
  • 评论:0

php中ob_start()系列函数有什么用?怎么使用

前言

本文重点解决php中ob_sa()系列函数有什么用?怎么使用问题,希望能够帮助到你

  我在看《php设计模式》的时候看到一个有趣的函数ob_start(),查了一下网友的博客,满心欢喜,我们在平时做模版缓存会选择Smart,实际上我们可以自己来,不借助其他工具,对于我这样对代码控制欲强的人来说简直好东西。输出控制函数可以帮助我们自由的控制php脚本数据的输出,对echo()这类函数起作用,但对header()等函数无效。所以我们利用这一点可以在header()函数之前进行输出,实际上一开始仅仅是输出到缓冲去并没有真正的输出,所以和header()之前输出会报错的说法并不矛盾。下面我们来看例子

    1.简单代码段

    我创建了一个test.php  

 

[php] view plain copy
  1. <?php  
  2. ob_start();//打开缓冲区输出  
  3. echo 'Hello';//  
  4. header('location:index.php');浏览器被重定向到index.php  
  5. ob_end_flush();//输出全部内容到浏览器  
    另外一个文件inde.php   
[php] view plain copy
  1. <?php  
  2. echo '看看在之前还是之后输出';  
    我原本以为会从test.php的内容输出到index.php,但是并不会跨域输出,依然仅仅是输出到当前界面。这里最值得注意的是通常情况下header()之前有输出会报错,但这里并没有,所以我们平常的说法要改一改了header()输出到浏览器页面会报错,这样说才对。

    2.相关函数介绍

     1)FLUSH():刷新缓冲区的内容,输出。

        函数格式:flush()

        说明:这个函数经常使用,效率高。

     2)ob_start():打开缓冲区

        函数格式:void ob_start();

        说明:他的作用就是打开缓冲区,所有非头文件的输出都会到缓冲区,作用就类似于我们使用GD库的时候创建的画布,可以使用ob_get_flush()或flush()输出缓冲区内容。

     3)ob_get_contents()返回缓冲区内的内容

        函数格式:string ob_get_contents()

        说明:如果没有激活缓冲区,将会返回FALSE

     4)ob_get_length():返回内部缓冲区的长度

        函数格式:init ob_get_length()

        说明:缓冲区没有激活将会返回FALSE

     5)ob_end_flush():输出缓冲区内容,关闭缓冲区

        函数格式:void ob_end_flush()

     6)ob_end_clean():删除缓冲区内容并关闭

        函数格式:void ob_end_clean()

        说明:注意这里并不会输出,而是起到类型销毁资源句柄一样的作用

     7)ob_implicit_flush:打开或关闭绝对刷新

        函数格式:void ob_implicit_flush([int flag])

        说明:默认关闭缓冲区,打开绝对输出后,每个脚本都直接发送到浏览器,不再需要使用flush()

     8)ob_clean()清空缓冲区内容,但并不会销毁缓冲区

       写代码的时候提示出来这样一个函数,注意和ob_end_clean()区别,这里补上。

    3.flush()深入

    他的作用是,刷新缓存(cache),这样的输出会在数据量超过256时才会被源源不断的输出。

 

[php] view plain copy
  1. <?php  
  2. for ($i = 0;  $i< 300; $i++) {  
  3.     echo $i.'-<br/>';  
  4.     sleep(0.9);  
  5. <span style="font-family:Courier New;font-size:14px;color:#330000;">}</span>  
这里与上面不同的是,会直接输出,并不会到达一定量才往外挤。直接使用ob_implicit_flush()写在最开始,就不再需要使用flush()
[php] view plain copy
  1. <?php  
  2. for ($i = 0;  $i< 20; $i++) {  
  3.     echo "$i";  
  4.    flush();  
  5.    sleep(2);  
  6. }  

    4.ob系列深入

     我在看到别人写的这个例子的时候,有些想法

 

[php] view plain copy
  1. <?php  
  2. ob_start();//打开缓冲区域  
  3. phpinfo();//使用phpinfo()函数  
  4. $info=ob_get_flush();//将缓冲区内的数据保存到变量中  
  5. file_put_contents('test.txt'$info);  
  6. ob_end_clean();<span style="font-family:Courier New;">//关闭输出</span>  
     原本对于phpinfo()这样的直接输出函数我们是束手无策的,但是利用缓冲区输出可以获得phpinfo()内容,这里要注意的是,浏览器还是会将phpinfo()打印到浏览器上,具体原因我也不清楚,大家找到原因了一定要告诉我。但是
[php] view plain copy
  1. <?php  
  2. ob_start();  
  3. echo '1234';  
  4. ob_end_clean();  
这样子使用是不会直接输出到浏览器,我们可以利用这个特性做模版缓存。
    

     我在阅读别人博客的时候也提到了这些:

     一、静态模版技术(高大上的感觉底裤脱下来,感觉就没什么了)

     这个高大上的说法是指:当用户访问一次以后,页面内容没有更新的情况下,我们缓存为静态HTML,当用户再次访问的时候直接读取上一访问的文件,极大的减小系统的压力。看到phpinfo()我想大家都想到了。但这里要说明的是,这个用户在跳转后就需要重新开启一个空间,所以要求我们在跳转之前另外做存储。

本网刊登的文章均仅代表作者个人观点,并不代表本网立场。文中的论述和观点,敬请读者注意判断。

本文地址:http://www.xlkjgs.com/notes/html/640.html

以上内容由本站整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

星联网络

星联网络是中国最具实战的互联网创业者的知识服务商,这里有互联网行业动态,网络推广,SEO优化,SEM优化,ESC配置,行业经验分型,互联网项目,微信营销、淘宝客赚钱、新媒体营销、京东运营、跨境电商等众多互联网营销知识分享

站长运营站长必备网站运营之道才能长久发展