我有一个php,如下所示,我试图理解php中的ob_start()函数。
// 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行的以下内容:
I am the right place问题陈述:
我想知道为什么代码不在Z行的ob_application_framer函数中。
发布于 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个全局变量(在您的代码中使用)来使代码运行。
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()的回调正在按其应有的方式执行。你想做什么特别的事吗?
https://stackoverflow.com/questions/73819367
复制相似问题