我正在尝试学习php(全新),我正在尝试实现与此帖中发现的完全相同的内容,即使用Cookie作为计数器并最后访问网站:
PHP cookie visit counter not working
但与该帖子中的用户不同,我遇到了这个臭名昭着的错误:
“这是你第一次在服务器上!警告:无法修改标题信息 - 已经发送的标题(输出从第17行的(...)开始
这是第17行:setcookie('visitCount1');
现在我意识到这很常见并且搜索了SO并找到了这篇文章:
How to fix "Headers already sent" error in PHP
我彻底阅读并了解了为什么会出现这种情况的可能原因,包括空格和在任何HTML代码之前输入我的浏览器提到的注释php行,并删除结束标记“?>”我也尝试将ob_start()放在我的代码的开头,但仍然会出现相同的错误结果。
以下是我尝试运行的代码(取自上面的帖子):
<?php
$Month = 3600 + time();
date_default_timezone_set('EST');
setcookie('AboutVisit1', date("D M j G:i:s T Y"), $Month);
?>
<?php
if(isset($_COOKIE['AboutVisit1']))
{
$last = $_COOKIE['AboutVisit1'];
echo "Welcome back! <br> You last visited on ". $last . "<br>";
}
if(isset($_COOKIE['visitCount1'])){
$cookie = ++$_COOKIE['visitCount1'];
echo ("You have viewed this page" . $cookie . "times.");
}
else
{
echo "It's your first time on the server!";
setcookie('visitCount1');
}
?>
我正在使用带有wamp服务器和chrome的netbeans 8.1作为我的浏览器。还有什么办法可以解决这个问题?
如果我只是在浏览器上或通过netbeans进行测试,是否真的可以看到Cookie和会话记录?
我是否必须包含一个html标题和正文或者我可以将它放在php正文中吗?
在PHP小提琴上它(有点)工作,我得到了这个(总是在同一时间):
欢迎回来! 您上次访问于2016年8月9日星期二15:43:00 这是你第一次在服务器上!
答案 0 :(得分:1)
您发布的代码包含空白区域。看:
var conn = mongoose.createConnection('mongodb://localhost/testA');
查看关闭和打开之间的空间?
答案 1 :(得分:1)
问题是您在发送最后一个cookie之前回显邮件:setcookie('AboutVisit1', date("D M j G:i:s T Y"), $Month);
?>
<?php
已经运行setcookie('visitCount1');
(或echo "It's your first time on the server!";
)后发送到浏览器。确保在发送最后一个cookie之前不要使用echo函数。
编辑:正如其他人指出的那样,你的代码中也有一个空格。
答案 2 :(得分:1)
鉴于你是全新的,这里有一些提示
<?php
// if you are going to change the timezone, best to always make this first, so it effects everything in the script
date_default_timezone_set('EST');
// 3600 seconds = 1 hour not Month
// give your variables proper names it will help if you get into that habit from day one
$one_hour = 3600;
$expires = $one_hour + time();
// check if visit cookie exists and increment it, otherwise, this must be visit 1
$count = isset($_COOKIE['visitCount1']) ? ++$_COOKIE['visitCount1'] : 1;
// set cookies at the start, before outputting anything
// i would also recommend setting the path, as that can catch you out if you have a deep directory structure, / will mean the cookie works for the whole site
setcookie('AboutVisit1', date("D M j G:i:s T Y"), $expires, '/');
setcookie('visitCount1', $count, $expires, '/');
if(isset($_COOKIE['AboutVisit1']))
{
$last_visit = $_COOKIE['AboutVisit1'];
// you don't need to use . to concatenate variables if you use double "
echo "Welcome back! <br> You last visited on $last_visit <br>";
}
if(isset($_COOKIE['visitCount1'])){
// you dont' need () when you do echo
// you don't need to use . to concatenate variables if you use double quotes "
echo "You have viewed this page $count times.";
} else {
echo "It's your first time on the server!";
}
// you don't need trailing ?>
答案 3 :(得分:0)
在输出任何其他内容之前,应调用setcookie()
函数。因此,代码中有一些部分在调用setcookie
之前输出了一些内容。