今天我第一次使用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'].";
}
?>
答案 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
和?>
标记之外的任何内容,并且在header
或setcookie
命令之前不能包含任何内容。< / p>
为了摆脱警告/错误,您需要设置error_reporting(0)
。
但是,您应该只在生产阶段(当您将网站放在网上时)执行此操作。您应该对代码进行编程,以便即使使用error_reporting(E_ALL)
也不会出现错误。
警告是有原因的。不要忽视它们。
答案 1 :(得分:4)
发送标题之前的任何空格都被视为输出...因此,必须消除PHP标记之间的空格。
error_reporting(0);
会压制所有错误,但您应该设法修复并理解错误,而不是隐藏错误。
编辑:如果您仍想报告错误,但只是不向用户显示错误,请使用以下命令:ini_set('display_errors','off');
编辑#2:澄清一下,setcookie向浏览器发送一个标题,所有标题必须在输出任何内容之前发送。因此,在设置cookie之前,您还应该消除或延迟session.php中的任何输出。
答案 2 :(得分:0)
要发送cookie,服务器需要设置一个或多个Cookie
标头。一旦实际的主体内容开始进入浏览器,就无法设置HTTP标头。首先回答第二个问题;在将任何输出发送到浏览器之前,您需要确保已设置cookie(以及任何其他标题)。
您会看到此问题,因为在?>
和<?
个标记集之间会发出空格(换行符)。杀死空白,它应该结束问题。
为了解决更广泛的问题,请考虑使用输出缓冲(请参阅ob_start()
等),以帮助防止输出在您准备好之前进入浏览器。
答案 3 :(得分:-1)
你应该将setcookie作为代码中的第一件事,甚至在sesion.php之前。你试过吗?