访问PHP程序页面出现"Warning: Cannot modify header information - headers already sent by …."报错
更新时间:
问题描述
访问PHP程序页面时,出现"Warning: Cannot modify header information - headers already sent by …."报错。
问题原因
在PHP中Cookie的使用存在一些限制,本文的报错是由于PHP程序在输出内容之前产生了Cookie。
- setcookie函数必须在标签之前使用。
- 使用setcookie函数之前,不可以使用echo函数输入内容。
- 在网页被加载完后,Cookie才会出现。
- setcookie函数必须在数据输出浏览器前对Cookie进行赋值。
解决方案
- 若需要在输出内容之前产生Cookie,可以在程序的最上方加入ob_start函数,ob_start是打开输出缓冲区的函数。例如void ob_start(void),当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。如果需要输出缓冲区的内容,可以使用ob_end_flush或flush函数输出缓冲区的内容。
- 如果是使用ECS服务器,需要在php.ini中开启output_buffering,即
output_buffering = On
,则会开启所有PHP程序的输出缓存。但是这样做会影响PHP执行效率,请根据服务器的性能和代码的复杂度选择是否开启该功能。 - 如果是Linux系统的虚拟主机,请在控制面板页面的PHP.ini设置中,将 输出缓冲区数据块设置 参数设置为 启用,然后等待3分钟后进行测试,确认符合预期。
适用于
- 云虚拟主机
文档内容是否对您有帮助?