我有这样的代码:
<!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。
答案 0 :(得分:1)
如果您在output_buffering = On
中使用php.ini
,则可以在发送标题后发送Cookie。
这在php.ini评论中注意到:
输出缓冲允许您发送标题行(包括Cookie) 即使你发送了正文内容,也是以放慢PHP的速度为代价的 输出层有点。您可以在运行时启用输出缓冲 调用输出缓冲函数。您也可以启用输出 通过将此指令设置为On来缓冲所有文件。如果你希望 将缓冲区的大小限制为特定大小 - 您可以使用 最大字节数而不是&#39; On&#39;,作为此值 指令(例如,output_buffering = 4096)。