复制代码 代码如下:<?php setcookie(“username”,”bu”,time()+3600); echo “aaaaa”;?>运行有警告Warning: Cannot modify header information – headers already sent by
下面是别人建议
方法一:在PHP里Cookie的使用是有一些限制的。1、使用setcookie必须在<html>标签之前2、使用setcookie之前,不可以使用echo输入内容3、直到网页被加载完后,cookie才会出现4、setcookie必须放到任何资料输出浏览器前,才送出…..由于上面的限制,
在PHP编程中,setcookie()函数用于设置HTTP头部信息,创建一个新的cookie。然而,当遇到“Cannot modify header information - headers already sent by”错误时,意味着PHP已经尝试向浏览器发送了内容,而在此之前没有成功设置cookie。这是因为HTTP协议规定,一旦服务器开始发送HTML响应到浏览器,就不能再修改HTTP头部信息,包括设置cookie。以下是一些解决此问题的方法。
方法一:使用输出缓冲区
在PHP中,可以利用输出缓冲区(Output Buffering)来解决这个问题。通过调用`ob_start()`函数,可以开启一个输出缓冲区,这样在该函数调用之后的所有输出都不会立即发送到浏览器,而是先保存在内存中。这样,你就可以在任何位置使用setcookie()函数而不用担心已经发送了内容。在完成所有需要的操作后,使用`ob_end_flush()`或`flush()`将缓冲区的内容发送到浏览器。例如:
```php
<?php
ob_start();
setcookie("username", "bu", time()+3600);
echo "aaaaa";
ob_end_flush();
?>
```
方法二:调整PHP配置
另一种解决方法是修改PHP配置。在php.ini文件中,找到`output_buffering`设置,将其设置为`on`或一个非零值,如4096,这将启用默认的输出缓冲。然后重启Apache服务器,使改动生效。这样,PHP会在发送任何输出之前自动开启缓冲区。
关于编码问题:
当使用UTF-8编码的PHP文件时,需要注意文件是否含有字节顺序标记(BOM)。PHP 4和5不支持含有BOM的UTF-8文件,这可能导致“Cannot modify header information”错误。使用编辑器如Notepad++,可以查看并移除文件的BOM。在Notepad++中,选择“编码”菜单,然后选择“转换为UTF-8无BOM”。
总结:
在PHP中,正确设置cookie的关键在于确保在任何内容输出到浏览器之前调用setcookie()函数。使用输出缓冲区或者调整PHP配置文件可以避免“Cannot modify header information”错误。同时,对于UTF-8编码的文件,确保它们不含BOM以防止引发此问题。理解这些限制和解决方案对于编写高效且无错误的PHP代码至关重要。