首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

php中ob_start系列函数的使用

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

1.简单代码段

我创建了一个test.php

创建了另一个文件index.php

我原本以为会从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时才会被源源不断的输出。

这里与上面不同的是,会直接输出,并不会到达一定量才往外挤。直接使用ob_implicit_flush()写在最开始,就不再需要使用flush()

4.ob系列深入

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

原本对于phpinfo()这样的直接输出函数我们是束手无策的,但是利用缓冲区输出可以获得phpinfo()内容,这里要注意的是,浏览器还是会将phpinfo()打印到浏览器上,具体原因我也不清楚,大家找到原因了一定要告诉我。但是

这样子使用是不会直接输出到浏览器,我们可以利用这个特性做模版缓存。

您看此文用·秒,转发只需1秒呦~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180910B1H5J000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券