ob_start() drupal 7 中的意外行为

ob_start() unexpected behaviour in drupal 7

我在 drupal 自定义模块中编写了以下代码。

我在 $html 中得到输出,但它仍在打印文件的输出。 即:如果字符串 "hello" 存在于 custom-report.php 中,它会打印两次。

ob_start();
require_once('templates\custom-report.php');
$html = ob_get_contents();
echo $html;

使用ob_get_clean()代替ob_get_contents()

您必须清理并关闭输出缓冲区。


以下将:

1.)保存内容2.)只在需要的时候输出

ob_start();
require_once('templates\custom-report.php');
$html = ob_get_clean();
echo $html;

ob_get_contents()

这将return缓冲区内容,但不会擦除缓冲区的输出。


ob_get_clean()

这将return缓冲区内容,清理输出缓冲区,结束输出缓冲。


您问题中的代码具有这种不良影响:

1.) 输出缓冲区已保存但保持打开状态。 2.) echo $html 发送您保存的 输出缓冲区 内容的副本。 3.) PHP 在到达脚本末尾时自动刷新打开 输出缓冲区内容 。所以你的输出被发送了第二次。


这是 输出缓冲区 问题的绝佳资源: http://www.tuxradar.com/practicalphp/13/3/0