PHP:应该在*任何*其他页面内容之前调用setcookie()


PHP: Should setcookie() be called before *any* other page content?

我正在读到setcookie()函数向任何页面添加HTTP标头,因此必须在发送任何实际页面内容之前调用该函数。这对我来说很有道理。

但在那之后,有一个例子:

<?php
if (!isset($_COOKIE['visits'])) { $_COOKIE['visits']=0; }
$visits= $_COOKIE['visits'] +1;
setcookie('visits', $visits, time() + 3600);
include 'welcome.inc.php'
...

我的意思是,如果setcookie()必须是第一个,它不应该是:吗

setcookie('visits', $visits, time() + 3600);
$visits= $_COOKIE['visits'] +1;

而不是:

$visits= $_COOKIE['visits'] +1;
setcookie('visits', $visits, time() + 3600);

这是一个非常新手的问题,但不能完全理解这个例子中需要在一切之前调用setcookie()。

Cookies(像所有HTTP标头一样)需要在向页面输出之前发送,例如在打印()或echo()任何内容之前,并且不允许在第一个<?php。

但是

$visits= $_COOKIE['visits'] +1;

不会向页面添加任何输出,因此使用它是安全的。

http://php.net/setcookie

文档说,在脚本输出任何内容之前,您需要设置cookie。

原因:我本来会解释的,但这个链接做得很好。在回显内容之前,请务必调用setCookie。

如何修复";标头已发送";PHP 中的错误