PHP标头已经发送错误,而不是空白错误

时间:2014-12-10 18:11:58

标签: php html

我收到此错误:

  

警告:无法修改标题信息 - 已在第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:没有空格/换行问题,所以跳过这个答案。没有回音/打印错误,因为它之前确实有效,但在添加该代码之后它再也无法工作了。

2 个答案:

答案 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;
?>