PHP 页面报错Warning</b>: Cannot modify header information - headers already sent by

先给出解决方案再解释,如果急着用就不用看解释了。

解决方案一:保存php文件编码为utf-8无BOM码,具体操作可以用notepad++等编辑器完成,把 sesstion_start() 放在文档所有输出(包括html标签和php的输出语句,具体以实际运行后有无输出为准)之前。

解决方案二:有些同志虽然遵循了第一条方案,但由于php页面被include或require到另外一个页面中,导致前方有输出,同样报错,如果不想时刻注意session_start()使用位置的问题,可以在文件最开头写上 "ob_start()" 来打开缓冲,前提是没有使用带BOM的utf-8编码;

解决方案三:打开php配置文件php.ini,找到"output_buffering",设置为"On",这种方法个人不推荐,因为如果不能在开发过程中解决问题而依赖于服务器配置,那作品的可迁移性就非常差了;

有些人建议使用"@"符号来屏蔽错误信息,最好不要听,那属于掩耳盗铃。

问题原因:服务器返回给客户端(浏览器)的文档流分为头部和体结构,头部必须在体结构之前,所谓体结构,通俗地说就是html流;

而session_start()和header()之类方法都属于对文档头部信息的操作,因此在使用之前不能有任何html标记和php输出,但utf-8的BOM作为一段标记文件编码的不可见字符,却会被php当做输出,从而导致错误------php的设计理念中压根就没考虑utf-8的BOM这一说;

新版本的php都支持输出缓冲,从而可以在session使用之前把已输出的内容存放在缓冲区内,之后按顺序输出,后两个解决方案的原理就是打开了输出缓冲区。

经过一晚上的调试,终于找到了问题所在,上面的代码在html页面之后又调用了一个语言转换的方法,错就错在这个语言函数又继承了KernelService类,这个类里面执行了header处理,所以报了这个错误,正常的代码如最后一张图,是不能调用这个Kernel类的。

相关推荐
坚果派·白晓明41 分钟前
【鸿蒙PC三方库移植适配框架解读系列】第八篇:扩展lycium框架使其满足rust三方库适配
c语言·开发语言·华为·rust·harmonyos·鸿蒙
花间相见1 小时前
【PaddleOCR教程01】PP-OCRv5 全面指南:从模型架构到实战部署
开发语言·r语言
小短腿的代码世界1 小时前
Qt 股票订单撮合引擎:高频交易系统的核心心脏
开发语言·数据库·qt·系统架构·交互
谙弆悕博士3 小时前
快速学C语言——第16章:预处理
c语言·开发语言·chrome·笔记·创业创新·预处理·业界资讯
yuan199973 小时前
基于 C# 实现的 Omron HostLink (FINS) 协议 PLC 通讯
开发语言·c#
qq_422828624 小时前
android图形学之SurfaceControl和Surface的关系 五
android·开发语言·python
如竟没有火炬4 小时前
用队列实现栈
开发语言·数据结构·python·算法·leetcode·深度优先
折哥的程序人生 · 物流技术专研5 小时前
《Java 100 天进阶之路》第17篇:Java常用包装类与自动装箱拆箱深入
java·开发语言·后端·面试
C+++Python5 小时前
C 语言 动态内存分配:malloc /calloc/realloc /free
c语言·开发语言
水木流年追梦5 小时前
大模型入门-应用篇3-Agent智能体
开发语言·python·算法·leetcode·正则表达式