为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

PHP
123456qqq 2019-08-23 16:19:50

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

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



查看完整描述

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(),它会停止保存并丢弃保存的内容,或者停止保存并分别一次输出。


查看完整回答
反对 回复 2019-08-23
?
海绵宝宝撒

这是为了进一步澄清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  = "" ;


$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 ;    

//    02 - component contents

//    html

//    01 - component header

//    03 - component footer

//    more html

//    ----

//    html

//    01 - component header

//    02 - component contents

//    03 - component footer

//    more html 


//---------------------------------

function gf_component_assembler__without_ob( ) 

  { 

    $lvs_html  = "<div>01 - component header</div>" ; // <table ><tr>" ;

    include( "component_contents.php" ) ;

    $lvs_html .= "<div>03 - component footer</div>" ; // </tr></table>" ;


    return $lvs_html ;

  } ;


//---------------------------------

function gf_component_assembler__with_ob( ) 

  { 

    $lvs_html  = "<div>01 - component header</div>" ; // <table ><tr>" ;


        ob_start();

        include( "component_contents.php" ) ;

    $lvs_html .= ob_get_clean();


    $lvs_html .= "<div>03 - component footer</div>" ; // </tr></table>" ;


    return $lvs_html ;

  } ;


//---------------------------------

?>

<!-- component_contents.php -->

  <div>

    02 - component contents

  </div>


查看完整回答
反对 回复 2019-08-23
?
喵喵时光机

我使用这个,所以我可以用很多HTML打破PHP,但不能渲染它。它使我无法将其存储为禁用IDE颜色编码的字符串。

<?php
ob_start();?><div>
    <span>text</span>
    <a href="#">link</a></div><?php
$content = ob_get_clean();?>

代替:

<?php
$content = '<div>
    <span>text</span>
    <a href="#">link</a>
</div>';?>


查看完整回答
反对 回复 2019-08-23

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信