首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解php中的ob_start()函数

理解php中的ob_start()函数
EN

Stack Overflow用户
提问于 2022-09-22 18:45:01
回答 1查看 123关注 0票数 0

我有一个php,如下所示,我试图理解php中的ob_start()函数。

代码语言:javascript
复制
// Prepare for application Parsing {{{1
function ob_application_framer($content)
{
    global $report;
    if (!isset($_GET['hello'])) {
        $content = ob_application_handler($content);
    }

    if (isset($_GET['world'])) {
        $_SESSION['top'] = str_replace("<head>", "<head><base target='view_panel' />", $content);
        $_SESSION['bottom'] = '<!--Empty-->';

        return "<html>
    <head>
        <title>A*pplication Report Frame View: " . $report->getFirst('Title') . "</title>
    </head>
    <frameset rows='*,250'>
        <frame src='../top.php' />
        <frame src='../bottom.php' name='view_panel' />
    </frameset>
</html>";
    } else {
        return $content;
    }
}


if (!isset($_GET['hello']) || isset($_GET['world'])) {
    echo "I am the right place";        // Line A
    ob_start('ob_application_framer');  // Line Z
}

$_GET的值是Array ( [report] => ./history.php )

在网页上,它打印来自A行的以下内容:

代码语言:javascript
复制
I am the right place

问题陈述:

我想知道为什么代码不在Z行的ob_application_framer函数中。

EN

回答 1

Stack Overflow用户

发布于 2022-09-22 18:51:41

根据doc https://www.php.net/manual/en/function.ob-start.php,ob_start函数设置输出缓冲,以便所有echo()、print_r()或HTML都不会发送到输出,直到您显式地告诉PHP通过调用ob_flush()或其他类似的函数或脚本到达输出端为止。

ob_start的第二个参数是回调函数。当脚本结束或显式调用ob_flush()函数时,回调将被调用,回调函数的参数将包含在缓冲区中的内容。现在,您可以使用该内容,然后从函数中返回。无论您从函数中返回什么,都将被发送到输出。

您的"ob_application_handler()“定义在哪里?

确保您的ob_start回调函数没有任何错误。要验证它,请显式调用函数,并确保在那里没有任何错误,否则不会得到任何输出。

==================编辑=================

看这里..。

https://paiza.io/projects/kfVp4XU37o1ewMYk_k8RzA

看最后一行,我刚才重复了“我是正确的地方”,但最后的输出是“我是正确的地方-从ob_application_framer()中添加一些额外的东西”。

注意:我在示例的顶部添加了这个额外的代码,因为我不知道您在函数中使用的全局变量。因此,我刚刚创建了那些类和2个全局变量(在您的代码中使用)来使代码运行。

代码语言:javascript
复制
class Report{
    public function getFirst($key){
        return "something";
    }
}

class ApplicationConfig{
    public function getAll($key){
        return [];
    }
}

global $report;
$report = new Report();


global $application_config;
$application_config = new ApplicationConfig();

额外的单词是从ob_application_framer()内部填充的。因此,您的代码肯定是正常工作的,ob_start()的回调正在按其应有的方式执行。你想做什么特别的事吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73819367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档