2

我们的网站已经运行了几年,但发生了一些变化,这真的很奇怪。我已经尝试与主机交谈,但没有任何问题得到解决。

问题是第<?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,我网站上的内容框和许多其他文件变得有趣并且可能已损坏。一旦我重新上传了我的整个网站(即使没有发生代码更改),我运行缓慢的网站现在超级快,所有问题都消失了。我的文件也被其他主机损坏了,所以如果你将来也有奇怪的东西,请记住这一点。

4

2 回答 2

4

您的代码已正确执行,因为 ob_get_clean 是这样工作的:

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."}");
?>
于 2013-02-28T23:03:40.443 回答
0

尝试以下操作:

将此添加到 test.php 的开头

<?php include("empty_file.php"); ?>

empty_file.php 的内容:

<?php
echo "";
?>
于 2013-02-28T23:08:15.013 回答