警告:无法修改标头信息 - 已经发送的标头

时间:2010-01-31 23:18:48

标签: php

今天我第一次使用cookie但是我正面临警告

  

警告:无法修改标头   信息 - 已经发送的标题   (输出始于   E:\ xampp \ htdocs \ session.php:11)in   E:\ xampp \ htdocs \ home_page.php在线   7

这是我的代码:

<?php
include("session.php");
?>

<?php
$Month = 2592000 + time();    //this adds 30 days to the current time
setcookie(AboutVisit, date("F jS - g:i a"), $Month);
?>

<?php
if(isset($_COOKIE['AboutVisit']))
{
$last = $_COOKIE['AboutVisit'];
echo "Welcome back!  You last visited on ". $last;
}
else
{
echo "Welcome to our site!";
}
?>

<html>
<head>
    <title>Home Page</title>
    <script src="flowplayer-3.1.4.min.js"></script>

</head>


<body bgcolor="white">
<?php include('search_file.php'); ?>
<font color="red"><b><h2 align="center">Deepak Narwal Welcomes You</h2></b></font>
<hr size="2" width="50%">
<a  href="logout_file.php"><h3 align="right">Sign Out</h3></a>

<a 
    style="display:block;width:250px;height:200px;" 
    id="player">
</a>
<script language="JavaScript">
    flowplayer("player", "flowplayer-3.1.5.swf" , { clip: { autoPlay : false, autoBuffering: true},   playlist: [ 'video.flv', 'flowplayer.flv'] });  //create a object of clip name
</script>


<object classid="clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616" align="right" width="320" height="260" codebase="http://go.divx.com/plugin/DivXBrowserPlugin.cab">
<param name="custommode" value="none" />
    <param name="loop" value="true" />
    <param name="autoPlay" value="false" />
    <param name="autoBuffering" value="true" />
    <param name="src" value="http://localhost/idiot.mkv" />
<embed type="video/divx" src="http://localhost/idiot.mkv" custommode="none" width="250" height="200" loop="true"  autoPlay="false"  pluginspage="http://go.divx.com/plugin/download/">
</embed>
</object>


<br /><a href="upload_file.php"><h4>Up-Load Files</h4></a>
<br /><br />
<a href="list_files.php"><h4>List All Up-Loaded Files</h4></a>



</body>
</html>

这是什么错误,如何隐藏我网页上的警告?

是否有任何特定的地方放置cookie或我可以把cookie放在像cookie一样的地方吗?

这是我的session.php

    <?php
    session_start();
    if(!isset($_SESSION['employee']))
    {
        echo "Your are Logged Out";
        exit;
    }   

    else
    {
    echo "Welcome Mr.".$_SESSION['employee']['username'].";
    }
    ?>

4 个答案:

答案 0 :(得分:5)

因为在一堆空格之后你有setcookie命令。 AKA:

?>
             <--- Whitespace
<?php

您无法发送Cookie。

你应该这样做:

<?php
include("session.php");
?>

<?php
$Month = 2592000 + time();    //this adds 30 days to the current time
setcookie(AboutVisit, date("F jS - g:i a"), $Month);
?>

这样:

<?php
include("session.php");

$Month = 2592000 + time();    //this adds 30 days to the current time
setcookie(AboutVisit, date("F jS - g:i a"), $Month);
?>

如果仍然出现此错误,则很可能在session.php中有类似的空格。另外,如果您在echo之前setcookie有任何内容,则会产生相同的影响。

'空白'基本上是<?php?>标记之外的任何内容,并且在headersetcookie命令之前不能包含任何内容。< / p>


为了摆脱警告/错误,您需要设置error_reporting(0)

但是,您应该只在生产阶段(当您将网站放在网上时)执行此操作。您应该对代码进行编程,以便即使使用error_reporting(E_ALL)也不会出现错误。

警告是有原因的。不要忽视它们。

答案 1 :(得分:4)

  1. 发送标题之前的任何空格都被视为输出...因此,必须消除PHP标记之间的空格。

  2. error_reporting(0);会压制所有错误,但您应该设法修复并理解错误,而不是隐藏错误。

  3. 编辑:如果您仍想报告错误,但只是不向用户显示错误,请使用以下命令:ini_set('display_errors','off');

    编辑#2:澄清一下,setcookie向浏览器发送一个标题,所有标题必须在输出任何内容之前发送。因此,在设置cookie之前,您还应该消除或延迟session.php中的任何输出。

答案 2 :(得分:0)

要发送cookie,服务器需要设置一个或多个Cookie标头。一旦实际的主体内容开始进入浏览器,就无法设置HTTP标头。首先回答第二个问题;在将任何输出发送到浏览器之前,您需要确保已设置cookie(以及任何其他标题)。

您会看到此问题,因为在?><?个标记集之间会发出空格(换行符)。杀死空白,它应该结束问题。

为了解决更广泛的问题,请考虑使用输出缓冲(请参阅ob_start()等),以帮助防止输出在您准备好之前进入浏览器。

答案 3 :(得分:-1)

你应该将setcookie作为代码中的第一件事,甚至在sesion.php之前。你试过吗?