带标题的奇怪警告 - 在PHP中的位置“无法修改标题信息”

时间:2015-11-10 18:10:00

标签: php header warnings

  

警告:无法修改标头信息 - 已发送的标头   (输出始于   C:\ wamp \ www \ ecommerce \ base \ classes \ baseconfig.php:23)in   第6行的C:\ wamp \ www \ ecommerce \ base \ classes \ adminHelper.php

我知道上述警告的根本原因。但是我无法重新获得它。我的问题与其他问题和许多低调和封闭的主题不同。

  • 警告页面是:index.php,是我处理的唯一页面 显示和设置数据。当我在帮助者adminHelper.php上调用标题('Location')时会显示此警告

  • 我正在使用类coreConfig.php来设置和 获取索引页面的数据。

  • 还有一些辅助课程。

索引页面im使用相同的表单,相同的功能,相同的例程用于在表单中设置数据。只有数据随传递的参数而变化。 此页面与所有其他数据集完美配合,除了one.showing上述警告。我无法弄清楚为什么会发生这种情况。 我使用此函数格式化输出

    public $mainTabLength = "\t";
      public $tabLength = "\t\t";

      public function printFormat($text, $class) {
    if($this->useDivToPrint) {
      echo $this->mainTabLength . "<div class=\"$class\">" . $this->tabLength . "$text\n";
      echo $this->mainTabLength . "</div>\n";
    }
    else{
      echo $text;
    }
  }

我也不想使用缓冲代码......等待评论。

注意:我通过从IDE中删除任何空格来格式化我的PHP代码

更新:

通过检查缓冲区输出解决了这个问题。正如我所料,我的代码在调用header('Location')之前已经设置了一些头信息。但我确信我没有犯这样的错误,因为我的所有其他数据工作正常。但我很惊讶地看到缓冲区输出的数据工作集和导致警告的那个:

表单1:添加新类别(工作精细标题('位置')) 即使我可以看到已发送的以下标题信息:

<!DOCTYPE HTML>
<html>
<head>
<title>E-Commerce</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<link href="../css/style.css" media="screen" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" href="../images/favicon.png"/>
<script type="text/javascript" language="javascript" src="../jses/jquery-1.11.3.min.js"></script>
<script type="text/javascript" language="javascript" src="../jses/scripts.js"></script>
<script type="text/javascript" language="javascript" src="../jses/datePicker.js"></script>

表单2:添加新产品(不是工作标题('Location')导致警告) 我可以看到已发送的相同标题信息:

<!DOCTYPE HTML>
<html>
<head>
<title>E-Commerce</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<link href="../css/style.css" media="screen" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" href="../images/favicon.png"/>
<script type="text/javascript" language="javascript" src="../jses/jquery-1.11.3.min.js"></script>
<script type="text/javascript" language="javascript" src="../jses/scripts.js"></script>
<script type="text/javascript" language="javascript" src="../jses/datePicker.js"></script>

这是我无法检测到代码问题的根本原因。 为什么它适用于我的form1,即使它已经发送了一些标题信息!!

1 个答案:

答案 0 :(得分:0)

就像我在评论中所说的那样,问题是你在调用标题之前发送了一些输出,这是一个禁忌。这可能包括:

  • 从任何包含的文件输出,包括所有下面的内容,无论所包含文件的深度如何(包含另一个包含其他文件的文件的包含文件......等)。
  • SELECT * FROM table where `date` = '20-June-2015'; <?php标记之前或之后的换行符/空格。
  • 回应任何事情。
  • 甚至来自php标签之外的html输出。
  • php错误或警告。

这些以及更多内容将输出一些内容,并将被视为“在调用标题之前输出”。因为有些内容很难看,所以在查看页面时甚至可能看不到它。

您可以选择打开输出缓冲,或者在此请求期间找到一些不显示输出的方法。

如果你想看看输出的内容(可能有助于找到问题),你可以做类似的测试:

  • 在请求的第一个脚本的第一行(可能是index.php,浏览器请求的任何文件),在?>之后立即添加对ob_start()的调用。如果您的文件不是以<?php开头,那么那就是您的问题。
  • 在您收到错误的标题调用之前的行上,添加<?php之类的内容。

这将获得所有输出并写入文本文件。这次文件可能会运行没有错误(你只是打开缓冲)但它仍然应该写任何输出。还记得,它可能只是一个空格或换行符。因此,如果您打开文件并且什么也看不见,请确保检查是否写了一些非显示字符。

现在只需要暂停或找到并删除额外的空间。