企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
ob函数可以让你自由控制脚本中数据的输出。它非常地有用,特别是对于:当你想在数据已经输出后,再输出文件头的情况。输出控制函数不对使用 当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容 详情参看[【函数参考】及【扩展列表】->影响 PHP 行为的扩展->Output Control扩展(核心)](https://ihavenolimitations.xyz/a173512/php_note/1690518) 用户在client端得到的是由PHP产生的html页面。如果这个html页面不会再被更新,那么当另外的用户再次浏览此页面时,程序将不会再调用PHP以及相关的数据库,对于某些信息量比较大的网站,例如sina,163,sohu。类似这种的技术带来的好处是非常巨大的 比如你的程序需要输出一些内容到浏览器,而在输出的过程中因为某些异常或者错误需要放弃输出,则通过ob缓冲系统可以不把内容输出到浏览器(因为之前输出的内容还是缓冲中,可以随时清掉)。 比如某些函数是直接输出的,而你又想只捕捉这些输出而不让它们传到浏览器,也可以通过ob系统来进行捕捉 对你输出内容作统一修改的时候,你可以用这组方法在输出页面前取到输出内容,然后做完你想做的事之后,再输出 ## **延迟输出的时候有用** 因为原来的php是按脚本顺序执行的 如果前面输出了内容 ,执行到后面又想对前面已经输出的内容要修改,这时候就有用 用法示例 ~~~php-template <?php function callback($buffer) { // replace all the apples with oranges return (str_replace("apples", "oranges", $buffer)); } ob_start("callback");//第一个参数有值就是回调函数名 ?> <html> <body> <p>It's like comparing apples to oranges.</p> </body> </html> <?php ob_end_flush(); ?> ~~~ ``` ob_end_clean(); ob_start(); echo 19; $c1=ob_get_contents(); echo 29; $c2=ob_get_contents(); echo 39; $c=ob_get_contents(); ob_end_clean(); echo $c1.'<br>'; echo $c2.'<br>'; echo $c.'<br>'; ``` 结果: ``` 19 1929 192939 ``` 解决的是heard函数之前不能有echo\print_r\var_dump等输出内容