【问题标题】:How do I capture the result of an echo() into a variable in PHP?如何将 echo() 的结果捕获到 PHP 中的变量中?
【发布时间】:2010-10-30 20:30:37
【问题描述】:

我正在使用一个响应结果而不是返回结果的 PHP 库。有没有一种简单的方法可以从 echo/print 捕获输出并将其存储在变量中? (其他文本已经输出,没有使用输出缓冲。)

【问题讨论】:

    标签: php capture echo


    【解决方案1】:

    可以使用输出缓冲:

    ob_start();
    
    function test ($var) {
        echo $var;
    }
    
    test("hello");
    $content = ob_get_clean();
    
    var_dump($content); // string(5) "hello"
    

    但这不是一种干净有趣的语法。找一个更好的库可能是个好主意...

    【讨论】:

    • ob_start() 函数文档提供了一些细节:php.net/manual/en/function.ob-start.php
    • ob_get_contents() 将捕获回显的任何内容,但不会阻止稍后将其发送到浏览器。该字符串将被捕获回显。如果你想捕获而不是回显,你应该使用ob_get_clean()
    • 你是完全正确的kijin,我在你的评论之前编辑了一点。
    【解决方案2】:

    我知道的唯一方法。

    ob_start();
    echo "Some String";
    $var = ob_get_clean();
    

    【讨论】:

      【解决方案3】:

      如果可以的话,你真的应该重写这个类。我怀疑很难找到 echo/print 语句并将它们替换为$output .=。使用 ob_xxx 确实会占用资源。

      【讨论】:

        【解决方案4】:

        例如,在您的应用程序完全完成之前不要回显数据,这始终是一个好习惯

        <?php
        echo 'Start';
        
        session_start();
        ?>
        

        现在session_start 以及另一个函数字符串将无法工作,因为已经有数据作为响应输出,但是通过执行以下操作:

        <?php
        $output = 'Start';
        
        session_start();
        
        echo $output;
        ?>
        

        这可行且不易出错,但如果你必须捕获输出,那么你会这样做:

        ob_start();
        
        //Whatever you want here
        
        $data = ob_get_contents();
        
        //Then we clean out that buffer with:
        ob_end_clean();
        

        【讨论】:

          猜你喜欢
          • 2022-11-23
          • 1970-01-01
          • 2010-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-10
          • 2016-05-26
          • 2023-03-22
          相关资源
          最近更新 更多