【问题标题】:Why I don't get "headers already sent" error? [duplicate]为什么我没有收到“标头已发送”错误? [复制]
【发布时间】:2016-04-10 12:51:58
【问题描述】:

我有这样的代码:

<!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。

【问题讨论】:

    标签: php cookies http-headers


    【解决方案1】:

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

    这在 php.ini 注释中注意到:

    输出缓冲允许您发送标题行(包括 cookie) 即使在您发送正文内容之后,以减慢 PHP 的速度为代价 输出层一点。您可以通过以下方式在运行时启用输出缓冲 调用输出缓冲函数。您还可以启用输出 通过将此指令设置为 On 来缓冲所有文件。如果你希望 将缓冲区的大小限制为某个大小 - 您可以使用 最大字节数而不是“开”,作为此值 指令(例如,output_buffering=4096)。

    【讨论】:

    • 这是答案还是问题?
    • 就是这样,我将 output_buffering 设置为 4096。
    猜你喜欢
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    相关资源
    最近更新 更多