为什么要显示已发送的错误标头?

时间:2013-12-12 07:56:11

标签: php html

    <table>
     <tr>
      <td width="30"></td>
      <td><img src="Images/logo.jpg" width="100" height="100" />
      <td><td><h2>&nbsp;&nbsp;&nbsp;&nbsp;Kunal Structures (India) Pvt. Ltd.</h2></td>
     </tr>
    </table>
    <?php

    if(!isset($_SESSION['user_id']))
    {
        header("location:http://127.0.0.1/New%20folder/KSIPL1.10/KSIPL/index.php");
    }
    else 
    {
        $now = time(); // checking the time now when home page starts
        if($now > $_SESSION['expire'])
        {
                header("location: http://127.0.0.1/KSIPL1.10/KSIPL/index.php"); 
                echo "Session Expired !"." <a href='http://127.0.0.1/New%20folder/KSIPL1.10/KSIPL/index.php'>"." <h1> ".
                "Login again"." </h1>"."</a>";

                session_destroy();
        }
        else
        {
            $qry = mysql_query("SELECT * FROM user_main WHERE user_id=".$_SESSION['user_id']."");
            $loguser=mysql_fetch_assoc($qry);

            ?>
                <table class="headerinfo" align="right">
                <tr>
                <td>You are <span style="color:#40B3BA;"><?php echo $loguser['user_name']; ?></span>,</td>
                <td><a style="color:#f5f5f5; text-decoration:none;" href="logout.php"><b>Logout</b></a></td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                </tr>
                </table>
            <br/>
</div>  
            <?php

            if($loguser['user_type'] == "Administrator") //Custom Menubar for Administrator
            {
                ?>
                <div class="row-fluid">
                    <div class="navbar">
                    <div class="navbar-inner">
                        <a class="brand" href="#"></a>
                        <ul class="nav">
                        <li><a href="">Home</a></li>
                        <li><a href="">Documents</a></li>

                        </ul>
                    </div>
                </div>
                </div>
                <?php
            }
        }
    }

为什么它会向我显示已发送的标头错误,并且不会重定向到给定路径。 当会话_ [&#39;到期&#39;]条件变为真时,它应该移动到index.php文件,但由于标题错误,它不会发生。 我怎么解决这个问题。是否有任何避免标题错误的解决方案。

4 个答案:

答案 0 :(得分:6)

因为当您使用php标头函数时,如名称所示,它是标题,必须在任何内容之前发送。

每当您开始发送html时,服务器都会关闭标题部分并开始发送内容。然后,几行之后,你要求他在标题中添加一些东西。这是错误的'标题已经发送',他不能再添加它了。

要解决这个问题,请在编写任何普通html之前移动你的php(即使一个小空间足以触发标题结束。)

和另一个细节,它不会在标题后回显某些内容,因为它永远不会显示。

你可以替换

header("location: http://127.0.0.1/KSIPL1.10/KSIPL/index.php"); 
echo "Session Expired !"." <a href='http://127.0.0.1/New%20folder/KSIPL1.10/KSIPL/index.php'>"." <h1> ".
                                "Login again"." </h1>"."</a>";

session_destroy();

session_destroy();
header("location: http://127.0.0.1/KSIPL1.10/KSIPL/index.php"); 

答案 1 :(得分:1)

在进行任何输出之前,您必须使用php标头功能。所以你必须重组一些代码

<?php
session_start();
if(!isset($_SESSION['user_id'])){
    header("location:http://127.0.0.1/New%20folder/KSIPL1.10/KSIPL/index.php");

}
else{
    $now = time(); // checking the time now when home page starts
    if($now > $_SESSION['expire']) {
        session_destroy();
        header("location: http://127.0.0.1/KSIPL1.10/KSIPL/index.php"); 

    }
}
?>
<html>
<!-- put html code here... ->

答案 2 :(得分:0)

如果您收到“已发送标头”错误,则可能有三种原因。

如果此错误不是页面上的第一条错误消息,则很可能是之前错误的“雪崩效应”,您可能会忽略它。相反,要专注于修复之前的错误。当您修复第一条错误消息时,“已发送的标头”错误很可能会消失。

这通常可以通过快速自定义php.ini更改来解决:

1)创建一个自定义的php.ini文件(如果还没有)

  • 有关如何创建自定义php.ini文件的信息,请单击here

2)找到如下所示的行:

output_buffering = Off

3)将output_buffering行更改为:

output_buffering = On

这应该是使网站重新上线所需的一切。

参考:http://kb.site5.com/php/how-to-repair-headers-already-sent-php-errors/

您也可以在php文件的顶部添加<?php @ob_start();?>

答案 3 :(得分:0)

我同意Vincent Duprez的观点 但是在javaScript中还有替代方法

这是更新的“daker”代码

<?php
session_start();
if(!isset($_SESSION['user_id'])){
//header("location:http://127.0.0.1/New%20folder/KSIPL1.10/KSIPL/index.php");?>
<script>
window.location="http://127.0.0.1/New%20folder/KSIPL1.10/KSIPL/index.php";
</script>
<?php
}
else{
$now = time(); // checking the time now when home page starts
if($now > $_SESSION['expire']) {
    //header("location: http://127.0.0.1/KSIPL1.10/KSIPL/index.php"); 
?>
<script>
window.location="http://127.0.0.1/KSIPL1.10/KSIPL/index.php";

</script>
<?php        
session_destroy();

}
}
?>

它会起作用,请运行:)