• PHP 错误:Warning: Cannot modify header information


      PHP初学者容易遇到的错误:Warning: Cannot modify header information - headers already sent by ...;

      通常是由不正确使用 header,session_start ,setcookie等方法导致的,下面以session使用错误为例,其余几种解决方案类似;

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

      解决方案一:保存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使用之前把已输出的内容存放在缓冲区内,之后按顺序输出,后两个解决方案的原理就是打开了输出缓冲区。

  • 相关阅读:
    Python超轻量数据库之SQLite
    Docker镜像管理透析
    Docker-Compose实战「下篇」
    Docker-Compose实战「上篇」
    Docker-Compose初体验
    Docker火遍全球!dockerfile构建你必须得会
    Docker轻量管理Dashboard
    MongoDB入门实操《上篇》
    用LinkedList完成一个堆栈MyStack.2
    [翻译] 基于.NET Core构建微服务 第五部分:Marten域聚合的理想仓库
  • 原文地址:https://www.cnblogs.com/weir007/p/3554523.html
Copyright © 2020-2023  润新知