2016-01-06 119 views
0

我有这样的代码:为什么我没有收到“标题已发送”的错误?

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

,并从我的knowlege它应该返回警告

Cannot modify header information - headers already sent by 

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

回答

1

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

这是发现在php.ini评论:

输出缓冲允许你发送标题行(包括cookies) 即使您发送主体内容,以减缓PHP的 输出层位的价格。您可以在运行时通过调用输出缓冲功能 启用输出缓冲。您也可以通过将此指令设置为开启,为所有文件启用缓冲输出 。如果您希望 将缓冲区的大小限制为特定大小 - 您可以使用 的最大字节数而不是“开”,作为此指令的值(例如output_buffering = 4096)。

+0

这是一个答案或问题? –

+2

就是这样,我把output_buffering设置为4096。 – jcubic

相关问题