Home > php教程 > php手册 > 使用php函数setcookie()报错:Warning: Cannot modify header

使用php函数setcookie()报错:Warning: Cannot modify header

WBOY
Release: 2016-06-06 20:09:55
Original
1376 people have browsed it

快要下班的时候,看到php讨论学习群中有朋友说设置cookie的时候。向他要了代码看了原因!报错 Warning: Cannot modify header information headers already sent by (output started at cookie1.php:4) in cookie1.php on line 5 function sicookie(){if(isse

快要下班的时候,看到php讨论学习群中有朋友说设置cookie的时候。向他要了代码看了原因!报错
Warning: Cannot modify header information – headers already sent by (output started at cookie1.php:4) in cookie1.php on line 5

function sicookie(){
	if(isset($_COOKIE['overlords'])){
		echo $_COOKIE['zlg'];
		setcookie('overlords',date('Y-m-d H:i:s'),time()+3600);
	}else{
		setcookie('overlords',date('Y-m-d H:i:s'),time()+3600);
	}
}
sicookie();
Copy after login

看了PHP手册和搜索了原因。得到一下结论
方法一:
在PHP里Cookie的使用是有一些限制的。
1、使用setcookie必须在标签之前
2、使用setcookie之前,不可以使用echo输入内容
3、直到网页被加载完后,cookie才会出现
4、setcookie必须放到任何资料输出浏览器前,才送出
由于上面的限制,在使用setcookie()函数时,学会遇到 “Undefined index”、”Cannot modify header information – headers already sent by”…等问题,解决办法是在输出内容之前,产生cookie,可以在程序的最上方加入函数 ob_start();

ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。

方法二:
解 决Warning: Cannot modify header information – headers already sent by ……有人说要在文件开头写上ob_start();失败。

后来打开 php.ini 然后把 output_buffering 设为 on 。重起appache,OK。看来这才是解决办法。
特别注意:(我就是看了这个才解决问题的)
如果使用utf-8编码,一定要去掉UTF-8中的BOM,这都是因为utf-8编码文件含有的bom原因,而php4,5都是不支持bom的。去掉bom,可以用Notepad++打开转换一下。(我就是看了这个才解决问题的)
用PHP的ob_start(); 控制您的浏览器cache 。

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template