完美解决PHP中的Cannot modify header information 问题

   2015-11-07 0
核心提示:以下是对PHP中的Cannot modify header information问题的解决方法进行了详细的分析介绍,需要的朋友可以过来参考下

我就遇到这种问题,网上找到这个解决的方案,就收藏下
写PHP的朋友们肯定遇到过这样一个问题:通过header函数改变http协议头的时候,会出现一个类似下面格式的warning:

复制代码 代码如下:

Warning: Cannot modify header information - headers already sent by

这是为什么呢?因为在使用header函数之前,您不能输出任何东西,包括用echo或var_dump等输出函数的输出,还有在<?php之前的空格。不过有的时候,我们并没有输出任何东西,却还是会出现这个错误,这是因为我们的文件包含了BOM签名,我们必须把它去掉。下面我们就来讨论这个问题。

请看测试代码:

复制代码 代码如下:

<?php
header("content-type:text/html;charset=utf-8");
die();
?>

这段代码就是简单的header一下,在<?php之前也没有任何输出,也没有空格,但是网页里还是提示了Cannot modify header information的警告信息。这说明,在<?php之前还有内容,只是编辑器没有显示出来。

我们用ultraEdit打开这个文件,切换到16进制,可以看到,在文本的开头,有EFBBBF,之后才是3C 3F 70 68 70 ( <?php ),说明,在<?php之前,确实存在着输出信息,因此,在修改header的时候,会得到警告信息。

完美解决PHP中的Cannot modify header information 问题

这个EFBBBF是什么东西呢?它的名字叫BOM,Byte Order Mark,是在Windows下的一个约定,用于标记文本是否是Unicode。记事本程序就是通过这三个字节来判断文件是ANSI还是Unicode。

知道了问题发生的原因,下面,我们想办法把BOM去掉。用Dreamweaver打开这个php页面,然后进入页面设置(按Ctrl+J),弹出以下窗口:
    完美解决PHP中的Cannot modify header information 问题

取消选择“包括Unicode签名(BOM)”,确定就可以了。现在,我们再用UltraEdit打开看这个文件的16进制内容,如下图

完美解决PHP中的Cannot modify header information 问题

可以看到,现在BOM信息已经没有了,文件直接以3C3F70开头了。

最后,我们刷新一下浏览器,发现现在已经没有Warning提示了,问题解决。

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 添加文件【COCOS2DX-LUA 脚本开发之十三】解决l
    本文是一篇关于添加文件的帖子    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)CCString* pstrFileContent = CCString::createWithContentsOfFile("himi.lua");if (pstrFileContent) { pEngine-executeString(pstrFileContent-getCString()); }#else
    02-09
  • error - typescript - Cannot find name '
    ERROR in [at-loader] ./node_modules/@types/react/index.d.ts:377:23 TS2583: Cannot find name 'Set'. Do you need to change your target library? Try changing the `lib` compiler option to es2015 or later.错误原因:tsconfig.json里面的配置 compil
    02-09
  • 遇到 cannot load such file -- rubygems/defau
     以client.rb作为参数运行ruby -d,结果遇到: Exception `LoadError' at F:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems.rb:1273 - cannot load such file -- rubygems/defaults/ruby 查F:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems.rb:1273if defined
    02-09
  • ruby on rails 在windows使用devise时报cannot
    在windows实验ruby on rails rubygem devise,在注册用户时报cannot load such file —bcrypt_ext错误,下面是解决方法:1、首先安装Devki 下载地址 - http://rubyinstaller.org/downloads/2、将bin路径配置到环境变量path3、在命令端(cmd)执行命令:gem in
    02-09
  • nvm 安装 npm 报错Cannot find module 'D:
    在nvm 安装node 后使用node -v 没问题使用npm -v报错最后是在D:\根目录分别安装root: D:\nvmpath: D:\nodejs没问题了其中试了很多方法,环境变量添加删除时隔很久发现,找不到npm就直接复制一份npm到D:\node\nodejs\node_module完美解决
    02-09
  • Nodejs 连接 mysql时报错 Error: Cannot enqueu
    解决办法,参考:https://github.com/chill117/express-mysql-session/issues/18 我们只需在实例化SessionStore的时候,配置useConnectionPooling: true。比如:var sessionStore = new SessionStore({host: 'localhost',port: 3306,user: 'root',password:
    02-09
  • .NET/VB.NET: solving the error “The system
    Source LinkBumped into this error a while ago in Visual Studio 2010:KindErrorNumber80DescriptionUnable to open module file ‘C:\Users\username\AppData\Local\Temp\.NETFramework,Version=v4.0.AssemblyAttributes.vb’: The system cannot find the
    02-09
  • Go-The process cannot access the file becaus
    where?  Go程序在读取文件时候why?  因为有其他进程也在读取和Go程序想要读取的文件,参数冲突way?  关闭其他程序进程对该文件的读取操作
    02-09
  • go: cannot find main module; see ‘go help
    在指定目录下go build报错 : go: cannot find main module; see ‘go help modules’解决办法 : go env -w GO111MODULE=off参考文档:https://goproxy.io/zh/ 和 https://blog.csdn.net/benben_2015/article/details/82227338
    02-09
  • ' (小程序)">sdk uncaught third Error
    sdk uncaught third ErrorCannot assign to read only property 'constructor' of object '#V' 在app.json添加新的page时,出现该错误 修改添加新的page的json文件{"usingComponents": {}}修改后{}就好了,原因??不知道
    02-09
点击排行