[英]PHP setcookie() gives “Cannot modify header information – headers already sent” warning
[英]setcookie() always fails “headers already sent” even following the rules on php.net
相关的代码如下。 根据php.net,我必须确保没有输出,甚至没有空格。 没有 php标记是文档中的第一个标记,前面没有空格。 我究竟做错了什么?
<?php
// main.php
// 6:48 PM 8/6/2010
include('config.php');
// Does myid cookie exist?
if ( !isset( $_COOKIE['myid'] ) )
{
// Generate myid
$myid = substr(md5(date( 'Ymdhis' ) . str_replace( '.', '', $_SERVER['REMOTE_ADDR'] ) ), 0, 10);
// set the cookie
setcookie( 'myid', $myid, time() + 31536000 );
调用setcookie
之前根本不需要输出 ,即使从其他脚本也是如此。
例如,如果config.php
在打开<?php
标记之前(或在关闭?>
)具有空格,则可能会引起问题。
搜寻header
被调用的地方或存在PHP标记(甚至空格)之外的文本的地方。 毫无疑问,这就是正在发生的事情。
某些文本编辑器不会显示所有符号。 请尝试在不同的编辑器中打开main.php和config.php,并检查两个文件中<?php之前的内容。 我说不清Windows,但是在Linux上您可以使用vim
或vi
。 另外,完整的错误消息会告诉您确切的错误从哪里开始。
您无法阅读或至少将此错误消息粘贴到此处。 它有详细的解释,您在做什么错。
最有可能说输出开始于config.php:XXX。 很清楚
如果显示输出从main.php:0开始-这很可能是BOM字符,并且您必须使用编辑器的“保存”对话框或其他编辑器重新保存不带该文件的文件。
始终阅读完整的错误消息。 它不仅说明发生了什么问题,而且经常说明发生了什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.