猿问
下载APP

在php中使用ob_start()有什么用?

在php中使用ob_start()有什么用?

ob_start()用于output buffering使头被缓冲,而不是发送到浏览器?我在这里有道理吗?如果没有那么我们为什么要使用ob_start()



123456qqq
浏览 48回答 3
3回答

胡子哥哥

想想ob_start()说“开始记住通常会输出的所有内容,但还没有对它做任何事情。”例如:ob_start();echo("Hello there!"); //would normally get printed to the screen/output to browser$output = ob_get_contents();ob_end_clean();通常还有两个其他功能配对:ob_get_contents()它基本上可以为您提供已经“保存”到缓冲区的任何内容,因为它已打开ob_start(),然后ob_end_clean()或者ob_flush(),它会停止保存并丢弃保存的内容,或者停止保存并分别一次输出。

海绵宝宝撒

这是为了进一步澄清JD Isaaks的回答 ......您经常遇到的问题是您使用php从许多不同的PHP源输出html,并且这些源通常无论出于何种原因通过不同的方式输出。有时你想要直接输出到浏览器的文字html内容; 其他时候输出是动态创建的(服务器端)。动态内容总是(?)将成为一个字符串。现在你必须将这个字符串化的动态html与任何文字的,直接显示的html ...组合成一个有意义的html节点结构。这通常会迫使开发人员将所有直接显示内容包装成一个字符串(正如JD Isaak所讨论的那样),这样它就可以与动态html一起正确地传递/插入......即使你不是真的希望它包裹起来。但是通过使用ob _ ##方法,你可以避免那个字符串包装混乱。相反,文字内容输出到缓冲区。然后在一个简单的步骤中,缓冲区的所有内容(所有文字html)将连接到您的dynamic-html字符串中。(我的例子显示了将文字html输出到缓冲区,然后将其添加到html-string中......另请参阅JD Isaaks示例以查看字符串包装的html)。<?php // parent.php//---------------------------------$lvs_html&nbsp; = "" ;$lvs_html .= "<div>html</div>" ;$lvs_html .= gf_component_assembler__without_ob( ) ;$lvs_html .= "<div>more html</div>" ;$lvs_html .= "----<br/>" ;$lvs_html .= "<div>html</div>" ;$lvs_html .= gf_component_assembler__with_ob( ) ;$lvs_html .= "<div>more html</div>" ;echo $lvs_html ;&nbsp; &nbsp;&nbsp;//&nbsp; &nbsp; 02 - component contents//&nbsp; &nbsp; html//&nbsp; &nbsp; 01 - component header//&nbsp; &nbsp; 03 - component footer//&nbsp; &nbsp; more html//&nbsp; &nbsp; ----//&nbsp; &nbsp; html//&nbsp; &nbsp; 01 - component header//&nbsp; &nbsp; 02 - component contents//&nbsp; &nbsp; 03 - component footer//&nbsp; &nbsp; more html&nbsp;//---------------------------------function gf_component_assembler__without_ob( )&nbsp;&nbsp; {&nbsp;&nbsp; &nbsp; $lvs_html&nbsp; = "<div>01 - component header</div>" ; // <table ><tr>" ;&nbsp; &nbsp; include( "component_contents.php" ) ;&nbsp; &nbsp; $lvs_html .= "<div>03 - component footer</div>" ; // </tr></table>" ;&nbsp; &nbsp; return $lvs_html ;&nbsp; } ;//---------------------------------function gf_component_assembler__with_ob( )&nbsp;&nbsp; {&nbsp;&nbsp; &nbsp; $lvs_html&nbsp; = "<div>01 - component header</div>" ; // <table ><tr>" ;&nbsp; &nbsp; &nbsp; &nbsp; ob_start();&nbsp; &nbsp; &nbsp; &nbsp; include( "component_contents.php" ) ;&nbsp; &nbsp; $lvs_html .= ob_get_clean();&nbsp; &nbsp; $lvs_html .= "<div>03 - component footer</div>" ; // </tr></table>" ;&nbsp; &nbsp; return $lvs_html ;&nbsp; } ;//---------------------------------?><!-- component_contents.php -->&nbsp; <div>&nbsp; &nbsp; 02 - component contents&nbsp; </div>

喵喵时光机

我使用这个,所以我可以用很多HTML打破PHP,但不能渲染它。它使我无法将其存储为禁用IDE颜色编码的字符串。<?php ob_start();?><div> &nbsp;&nbsp;&nbsp;&nbsp;<span>text</span> &nbsp;&nbsp;&nbsp;&nbsp;<a&nbsp;href="#">link</a></div><?php $content&nbsp;=&nbsp;ob_get_clean();?>代替:<?php $content&nbsp;=&nbsp;'<div> &nbsp;&nbsp;&nbsp;&nbsp;<span>text</span> &nbsp;&nbsp;&nbsp;&nbsp;<a&nbsp;href="#">link</a> </div>';?>
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答