为什么我没有收到#34;标题已经发送"错误?

时间:2016-01-06 12:18:27

标签: php cookies http-headers

我有这样的代码:

<!DOCTYPE html>
<?php
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    $cookie_name = "user";
    $cookie_value = "John Doe";

    setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day

?>
<html>
    <body>

        <?php
        if (!isset($_COOKIE[$cookie_name])) {
            echo "Cookie named '" . $cookie_name . "' is not set!";
        } else {
            echo "Cookie '" . $cookie_name . "' is set!<br>";
            echo "Value is: " . $_COOKIE[$cookie_name];
        }
        ?>

    </body>
</html>

从我的知识中它应该返回警告

Cannot modify header information - headers already sent by

如同这个问题一样How to fix "Headers already sent" error in PHP 但我没有得到任何警告,而且设置了cookie。这是为什么? php是否添加了某种缓存,现在您可以在发送文本后发送标题?我使用的是php 5.6.11。

1 个答案:

答案 0 :(得分:1)

如果您在output_buffering = On中使用php.ini,则可以在发送标题后发送Cookie。

这在php.ini评论中注意到:

  

输出缓冲允许您发送标题行(包括Cookie)   即使你发送了正文内容,也是以放慢PHP的速度为代价的   输出层有点。您可以在运行时启用输出缓冲   调用输出缓冲函数。您也可以启用输出   通过将此指令设置为On来缓冲所有文件。如果你希望   将缓冲区的大小限制为特定大小 - 您可以使用   最大字节数而不是&#39; On&#39;,作为此值   指令(例如,output_buffering = 4096)。