访问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进行赋值。

 

解决方案

  1. 若需要在输出内容之前产生Cookie,可以在程序的最上方加入ob_start函数,ob_start是打开输出缓冲区的函数。例如void ob_start(void),当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。如果需要输出缓冲区的内容,可以使用ob_end_flush或flush函数输出缓冲区的内容。
  2. 如果是使用ECS服务器,需要在php.ini中开启output_buffering,即output_buffering = On,则会开启所有PHP程序的输出缓存。但是这样做会影响PHP执行效率,请根据服务器的性能和代码的复杂度选择是否开启该功能。
  3. 如果是Linux系统的虚拟主机,请在控制面板页面的PHP.ini设置中,将 输出缓冲区数据块设置 参数设置为 启用,然后等待3分钟后进行测试,确认符合预期。

 

适用于

  • 云虚拟主机