setcookie,不能修改标题信息 – 已经发送的标题
我是PHP新手,刚刚练习了PHP setcookie()并失败了。
http:// localhost / test / index.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <?php $value = 'something from somewhere'; setcookie("TestCookie", $value); ?> </body> </html>
http:// localhost / test / view.php
<?php // I plan to view the cookie value via view.php echo $_COOKIE["TestCookie"]; ?>
但是我没有运行index.php,IE这样的警告。
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test\index.php:9) in C:\xampp\htdocs\test\index.php on line 12
我启用了我的IE 6 cookie毫无疑问。
上面的程序有什么问题吗? 谢谢。
WinXP操作系统和XAMPP 1.7.3使用。
警告很清楚。
警告:无法修改头文件信息 – 第12行的C:\ xampp \ htdocs \ test \ index.php中已经发送了头文件(输出在C:\ xampp \ htdocs \ test \ index.php:9开始)
Cookie在HTTP响应头中发送。 由于HTML内容已经开始,你不能回头去添加cookie。
setcookie()定义一个cookie和其余的HTTP头一起发送。 和其他头文件一样,Cookie必须在脚本输出之前发送(这是一个协议限制)。 这要求您在任何输出之前调用此函数,包括
<html>
和<head>
标记以及任何空格。
在出现任何HTML之前移动setcookie
语句:
<?php $value = 'something from somewhere'; setcookie("TestCookie", $value); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ....
Cookie在HTTP页面传输的标题中发送。 一旦你提供了一些输出,你不能再修改这些。
在你的情况下,问题在于你在尝试设置cookie之前输出一些HTML文档。
有几种方法可以解决这个问题。 其中之一是在输出页面上的任何内容之前设置cookie
<?php $value = 'something from somewhere'; setcookie("TestCookie", $value); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> </body> </html>
或者,你可以缓冲你的输出,直到你明确地告诉它没有任何东西被写入
<?php ob_start(); // Initiate the output buffer ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <?php $value = 'something from somewhere'; setcookie("TestCookie", $value); ?> </body> </html> <?php ob_end_flush(); // Flush the output from the buffer ?>
有关最后一种方法的更多信息,请查看ob_start和ob_end_flush函数。
阅读setcookie也许是有用的。
或者只是转身
output_buffering = On
在你的php.ini
请参阅http://digitalpbk.com/php/warning-cannot-modify-header-information-headers-already-sent获取完整解决scheme
在设置cookie之前,您正在发送一些HTML。 在发送任何输出之前,cookie必须被设置,因为它是与响应头一起发送的。 做这个:
<?php $value = 'something from somewhere'; setcookie("TestCookie", $value); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> </body> </html>
这里值得一看…
我有同样的问题,发现有一个空格后closures?>
在一个文件的结尾,我正在包括在正确的地方,在任何输出产生之前。 这让我发疯了!