ob_start()drupal 7中的意外行为

时间:2015-03-11 07:11:54

标签: php drupal-7

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

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

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

1 个答案:

答案 0 :(得分:1)

使用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()

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


ob_get_clean()

这将返回缓冲区内容,清除输出缓冲区,结束输出缓冲。


您问题中的代码会产生不良后果:

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


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