【问题标题】:ob_clean doesn't clean the output before the header file?ob_clean 不清理头文件之前的输出?
【发布时间】:2012-01-14 19:44:05
【问题描述】:

我正面临这个问题。我更改了 db.php 文件,不幸的是我在 php 标记之前和之后放置了空格。我在 image.php 文件中使用了它。我收到了已经发送的错误标头。我知道这是因为 db.php 中的空间,但我在 image.php 中使用了 ob_clean。

下面是代码。

  spaceishere<?php
  $con=mysql_connect("localhost", "username", "password") or die ('I cannot connect to the           database because: ' . mysql_error());
  mysql_select_db("dbname",$con) or die  ("Cannot Connect to Database");
  ?>andhere  

image.php 文件包含的代码

<?php
require_once('db.php');
$sql="mysqlquery";
$query = mysql_query($sql); 
$row = mysql_fetch_assoc($query);
ob_clean();
header("content-type:image/jpg") ; 
echo stripslashes($row[imagecolumn]); 
?>

当我删除 db.php 中的空格时一切正常。但我无法理解为什么我的 ob_clean 不工作。

请任何人解释一下。我不想更改 db.php 文件。因为我有问题。请不要问什么问题。

我想在 image.php 中完成所有更改以使其正常工作。

请帮忙。

【问题讨论】:

    标签: php header buffer


    【解决方案1】:

    在包含之前,您应该首先调用ob_start(); 来启动输出缓冲。

    【讨论】:

    • 请注意,有时默认情况下它是打开的(请参阅output_buffering),但更好的解决方案是始终不要将空格放在首位;)
    • 当然。但我认为检查小事情总是更好,比如忘记开始缓冲并期望它在那里。
    • 这个人成功了...你节省了我的时间。我在 跨度>
    • 没问题。很高兴能得到帮助:)
    • 另外,如果您查看 php.net 中的 ob_clean() (php.net/manual/en/function.ob-clean.php),则会注意到“输出缓冲区必须由带有 PHP_OUTPUT_HANDLER_CLEANABLE 标志的 ob_start() 启动。否则 ob_clean( ) 将不起作用。”
    【解决方案2】:

    我认为那是因为您不在“php”模式下,所以 php 不知道输出缓冲区中的内容,因为它只知道 php 解析的内容以及 php-tags 中的内容。 因此,在您的情况下,空格位于 php 标记之外,因此 php 不知道这一点并且无法“清理”它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多