我收到此错误:
警告:无法修改标题信息 - 已在第86行的C:\ wamp \ www \ stuffs.php中发送的标题(输出从C:\ wamp \ www \ header.php:166开始)
的header.php
<aside id="route_header">
<ul>
<li id="welcome">
<a href="<?php echo $username_db?>"><?php echo "Hello $fname_db";?></a>
</li>
<li id="forback">
<span id="click_requests">
<img src="images/group_req.png" width="25px" height="25px">
<span id="request_number">0</span>
</span>
<div id="group_request_wrapper">
<div>
<span>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
</span>
</div>
<div id="read_all_requests">
<a href="#">Read all</a>
</div>
</div>
</li>
<li id="search_form_header">
<form role="search" id="search_form" method="get">
<input type="search" placeholder="Search..."/>
</form>
</li>
<li id="personalFLink"><a href="/personal">Personal</a></li>
<li id="settings">
<a href="/settings">Settings</a>
<!--<img class="settings_image" src="images/settings.png" width="20px" height="20px">
<ul id="drop_down_settings">
<li>Settings</li>
<li>Privacy</li>
</ul>-->
</li>
<li id="logout_header"><a href="/end_session.php">Logout</a></li>
</ul>
</aside>
</h1>
</header>
<div id="main_bottom_wrapper">
其中
<div id="main_bottom_wrapper>
是 header.php 中的第166行。
这是代码的一半。但问题是,我的标题工作正常,直到我在 header.php 中添加以下代码:
<span>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
</span>
我不知道它与这些行代码有什么关系。我尝试用ul / li / span /替换div,但没有任何工作。
我可能会错过显而易见的事情,但我似乎无法找到解决方案。
stuffs.php
if(mysqli_query($con, $gcontent_query)){
header("Location:/".$group_url."&".$fname_key);
exit();
}
这是我的第86行。
P.S:没有空格/换行问题,所以跳过这个答案。没有回音/打印错误,因为它之前确实有效,但在添加该代码之后它再也无法工作了。
答案 0 :(得分:2)
错误实际上是你添加任何输出的第二个(包括空格,或者在这种情况下,标记),之后你就不能再调用标题了。作为测试 - 临时注释你的标题行。你会看到你的代码有效。
header("Location:/".$group_url."&".$fname_key);
如果您发送了其他任何内容,总是会使您的代码崩溃。评论它以证明对自己。您的代码将神奇地重新开始工作,直到您取消注释它。
最有可能的是,您需要重新设计代码以发送html(<div>
,<span>
等)或调用header()
函数,但不能同时调用两者。另一种方法是在代码中移动标题调用EARLIER,以便它在其他任何东西之前执行WAY。然后,当然,你想要停止执行(因为你要求重定向。)
浏览器如何工作
要理解为什么这是一个问题 - 为什么在发送内容(如HTML)后无法发送标题,请考虑浏览器如何看待数据包:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: 28
<div><span>text</span></div>
标题是前三行。在那之后,两个回车然后是车身。通过首先发送html,它强制php计算标题(包括,最重要的是,内容长度!)之后,标题被发送。你现在要发送尸体了。因此,通过稍后调用header()
,添加另一个标题,你要求php及时返回并取消发送标题,这当然......它无法做到。
答案 1 :(得分:1)
来自PHP自己的手册(http://php.net/manual/en/function.header.php):
请记住,在任何实际输出之前必须调用header() 通过普通HTML标记,文件中的空行或PHP发送。 使用include或require读取代码是一个非常常见的错误, 函数或其他文件访问函数,并且有空格或空 调用header()之前输出的行。一样的问题 使用单个PHP / HTML文件时存在。
<html>
<?php
/* This will give an error. Note the output
* above, which is before the header() call */
header('Location: http://www.example.com/');
exit;
?>