警告:无法修改标头信息 - 已发送的标头 (输出始于 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,即使它已经发送了一些标题信息!!
答案 0 :(得分:0)
就像我在评论中所说的那样,问题是你在调用标题之前发送了一些输出,这是一个禁忌。这可能包括:
SELECT * FROM table where `date` = '20-June-2015';
或<?php
标记之前或之后的换行符/空格。这些以及更多内容将输出一些内容,并将被视为“在调用标题之前输出”。因为有些内容很难看,所以在查看页面时甚至可能看不到它。
您可以选择打开输出缓冲,或者在此请求期间找到一些不显示输出的方法。
如果你想看看输出的内容(可能有助于找到问题),你可以做类似的测试:
?>
之后立即添加对ob_start()
的调用。如果您的文件不是以<?php
开头,那么那就是您的问题。<?php
之类的内容。这将获得所有输出并写入文本文件。这次文件可能会运行没有错误(你只是打开缓冲)但它仍然应该写任何输出。还记得,它可能只是一个空格或换行符。因此,如果您打开文件并且什么也看不见,请确保检查是否写了一些非显示字符。
现在只需要暂停或找到并删除额外的空间。