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
我在 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