我们的网站已经存在了几年,而且发生了一些变化,这真的很奇怪。我尝试过与托管交谈,但没有得到解决。
问题是第一个包含文件中第一个<?php
标记之前的所有内容在进入OB之前直接输出
例如:
<?php
ob_start();
?>
<h1>Welcome</h1>
<?php
include('contentbox1.php');
include('contentbox2.php');
include('contentbox3.php');
?>
<b>Bye</b>
<?php
$content = ob_get_contents();
ob_end_clean();
echo("Included{".$content."}");
?>
得到的输出是:(注意<h1>Welcome</h1>
与缓冲区内输出的其余内容不一致)
<h1>Welcome</h1>
Included{
<div id="contentbox1"></div>
<div id="contentbox2"></div>
<div id="contentbox3"></div>
<b>Bye</b>
}
正确的输出应该是什么(并且在我的本地机器上):
Included{
<h1>Welcome</h1>
<div id="contentbox1"></div>
<div id="contentbox2"></div>
<div id="contentbox3"></div>
<b>Bye</b>
}
这对我们的网站造成了重大问题,我无法弄清楚原因。它在我的本地机器上完美运行,而不是我们多年来一直使用的主机。
解:
事实证明,当我重新上载test.php
时,我网站上的内容框和许多其他文件都很有趣并且可能已损坏。一旦我重新上传我的整个网站(即使没有发生代码更改),我的网站运行缓慢现在超级快,所有问题都消失了。我的文件也被其他主机损坏了,所以如果你将来也有奇怪的东西,请记住这一点。
答案 0 :(得分:3)
您的代码已正确执行,因为这是ob_get_clean的工作方式:
ob_get_clean — Get current buffer contents and delete current output buffer
返回输出缓冲区和结束输出缓冲的内容。如果 输出缓冲未激活,然后返回FALSE。
使用ob_get_contents();
ob_start();
include('test.php');
$content = ob_get_contents();
ob_end_clean();
echo("Included{".$content."}");
更新
<?php
ob_start();
?>
<h1>Welcome</h1>
<?php
include('contentbox1.php');
include('contentbox2.php');
include('contentbox3.php');
?>
<b>Bye</b>
<?php
$content = ob_get_contents();
ob_end_clean();
echo("Included{".$content."}");
?>
答案 1 :(得分:0)
尝试以下方法:
将其添加到test.php的开头
<?php include("empty_file.php"); ?>
empty_file.php的内容:
<?php
echo "";
?>