无法修改标头信息设置cookie


Cannot modify header information setcookie

我最近从 php 5.3 升级到 php 5.6

但是我的代码中收到一个错误:

Warning:  Cannot modify header information - headers already sent by (index.php:1) in core.php on line 2927

2927路

setcookie(COOKIE_TOKEN, NULL, -1);

COOKIE_TOKEN是:

define('COOKIE_TOKEN', 'name');

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

该问题是由$HTTP_RAW_POST_DATA引起的:http://php.net/manual/en/migration56.deprecated.php

底部有一个示例应该有助于确认它:

<?php
    ini_set('always_populate_raw_post_data',-1);
    $HTTP_RAW_POST_DATA = file_get_contents('php://input');
    echo $HTTP_RAW_POST_DATA;
?>

http://php.net/manual/en/reserved.variables.httprawpostdata.php

PHP 5.6 已弃用,自动填充HTTP_RAW_POST_DATA 变量并引入了弃用通知。如果设置处于左侧 默认值为 0 时,核心中的请求可以触发此通知 尽管HTTP_RAW_POST_DATA未被使用或访问。

另请参阅:有关弃用"$HTTP_RAW_POST_DATA"的警告

警告很明确。

警告:无法修改标头信息 - 标头已由 发送 (索引.php:1) 在核心.php在 2927 行

从 http://php.net/setcookie:

setcookie() 定义了一个要与其余部分一起发送的 cookie HTTP 标头。与其他标头一样,必须在任何标头之前发送 Cookie 脚本的输出(这是协议限制)。这 要求您在任何输出之前调用此函数, 包括和标签以及任何空格。

在任何HTML出现之前移动该 setcookie 语句: