完美解决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的时候,会得到警告信息。

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

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

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

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

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

(0)

相关推荐

  • php中get_headers函数的作用及用法的详细介绍

    get_headers() 是PHP系统级函数,他返回一个包含有服务器响应一个 HTTP 请求所发送的标头的数组.如果失败则返回 FALSE 并发出一条 E_WARNING 级别的错误信息(可用来判断远程文件是否存在). 函数定义 array get_headers ( string $url [, int $format = 0 ] ) 参数 url 目标 URL format 如果将可选的 format 参数设为 1,则 get_headers() 会解析相应的信息并设定数组的键名. 示例

  • 探讨php中header的用法详解

     header() is used to send raw HTTP headers. See the HTTP/1.1 specification for more information on HTTP headers. 范例一: 复制代码 代码如下: <?PHPHeader("Location: http://www.jb51.net";); exit;//在每个重定向之后都必须加上"exit",避免发生错误后,继续执行.?> 复制代码 代码如下:

  • 浅析php header 跳转

    PHP的header函数 可以很少代码就能实现HTML代码中META 标签这里只说用 header函数来做页面的跳转 1. HTML代码中页面的跳转的代码HTML meta refresh 刷新与跳转(重定向)页面refresh 属性值 -- 刷新与跳转(重定向)页面* refresh用于刷新与跳转(重定向)页面* refresh出现在http-equiv属性中,使用content属性表示刷新或跳转的开始时间与跳转的网址* 引用网址:http://www.dreamdu.com/xhtml/re

  • 使用php get_headers 判断URL是否有效的解决办法

    在php中判断一个文件或目录是否存在,大家通常都会想到is_file和file_exists两个函数.但这两个函数再判断一个远程url文件是否存在的问题上还是会存在这样那样的问题.这里作者将和大家分享一种利用php get_headers函数来判断远程url文件是有效否存在的办法. 关于php get_headers函数的作用及用法,可以参考本站文章: php中get_headers函数的作用及用法的详细介绍下面来具体说如何利用php get_headers却判断url的真实有效性. 通过该函数

  • 分享PHP header函数使用教程

    复制代码 代码如下: <?php // fix 404 pages: header('HTTP/1.1 200 OK'); // set 404 header: header('HTTP/1.1 404 Not Found'); // set Moved Permanently header (good for redrictions) // use with location header header('HTTP/1.1 301 Moved Permanently'); // redirec

  • PHP 使用header函数设置HTTP头的示例解析 表头

    如下所示: 复制代码 代码如下: //定义编码  header( 'Content-Type:text/html;charset=utf-8 '); //Atom  header('Content-type: application/atom+xml'); //CSS  header('Content-type: text/css'); //Javascript  header('Content-type: text/javascript'); //JPEG Image  header('Con

  • php 模拟get_headers函数的代码示例

    复制代码 代码如下: <?php 02 if(!function_exists('get_headers')){ 03     function get_headers($url,$format=0){ 04         $url=parse_url($url); 05         $end="\r\n\r\n"; 06         $fp=fsockopen($url['host'],(empty($url['port'])?80:$url['port']),$er

  • php header功能的使用

    header() 函数向客户端发送原始的 HTTP 报头. 复制代码 代码如下: <?php//200 正常状态header('HTTP/1.1 200 OK');// 301 永久重定向,记得在后面要加重定向地址 Location:$urlheader('HTTP/1.1 301 Moved Permanently');// 重定向,其实就是302 暂时重定向header('Location: http://www.maiyoule.com/');// 设置页面304 没有修改header('

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

    我就遇到这种问题,网上找到这个解决的方案,就收藏下写PHP的朋友们肯定遇到过这样一个问题:通过header函数改变http协议头的时候,会出现一个类似下面格式的warning: 复制代码 代码如下: Warning: Cannot modify header information - headers already sent by 这是为什么呢?因为在使用header函数之前,您不能输出任何东西,包括用echo或var_dump等输出函数的输出,还有在<?php之前的空格.不过有的时候,我们并

  • PHP提示Cannot modify header information - headers already sent by解决方法

    本文实例讲述了PHP提示Cannot modify header information - headers already sent by解决方法,是进行PHP程序设计过程中经常会遇到的问题.本文对此以实例形式分析解决方法.分享给大家供大家参考.具体方法如下: 现来看看这段代码: <?php ob_start(); setcookie("username","test",time()+3600); echo "the username is:&qu

  • PHP setcookie() cannot modify header information 的解决方法

    使用setcookie()函数时总是报以下错误: Warning: Cannot modify header information - headers already sent by.... 解决办法如下: 方法一: 在PHP里Cookie的使用是有一些限制的. 1.使用setcookie必须在<html>标签之前 2.使用setcookie之前,不可以使用echo输入内容 3.直到网页被加载完后,cookie才会出现 4.setcookie必须放到任何资料输出浏览器前,才送出 .....

  • PHP错误Warning: Cannot modify header information - headers already sent by解决方法

    今天在测试以下代码时遇到该错误: 复制代码 代码如下: session_start(); $_SESSION['username']=$username; echo "<script language='javascript'>location.href='../admin.php';</script>"; exit(); 出现错误: 复制代码 代码如下: Warning: Cannot modify header information - headers a

  • php出现Cannot modify header information问题的解决方法大全

    这样的语句,很显然,造成这个原因是因为setcookie造成的,查了一下网上,有如下的解释:      cookie本身在使用上有一些限制,例如:        1.呼叫setcookie的敘述必須放在<html>标签之前        2.呼叫setcookie之前,不可使用echo        3.直到網頁被重新載入後,cookie才會在程式中出現        4.setcookie函数必須在任何資料輸出至浏览器前,就先送出        5.--        基於上面這些限制,所以

  • 完美解决Java中的线程安全问题

    给出一个问题,如下: 解决方案如下: public class Demo_5 { public static void main(String[] args) { //创建一个窗口 TicketWindow tw1=new TicketWindow(); //使用三个线程同时启动 Thread t1=new Thread(tw1); Thread t2=new Thread(tw1); Thread t3=new Thread(tw1); t1.start(); t2.start(); t3.s

  • Cannot modify header information错误解决方法

    <?php ob_start(); setcookie("username","宋岩宾",time()+3600); echo "the username is:".$HTTP_COOKIE_VARS["username"]."\n"; echo "the username is:".$_COOKIE["username"]."\n"; pr

  • 完美解决dedecms中的[html][/html]和[code][/code]问题

    终于解决了完美解决dedecms中的[html][/html]和[code][/code]问题,因为我的php不太熟练,所以正则搞了好几天,才能好,这次主要修改了discuz5.5和dedecms3.1的运行功能和code功能,好开心啊,开始新站的数据转移工作和新站模版制作了,到时候一个全新的我们了,如果有问题,大家可以交流下,现在blueidea和51js和dedecms的论坛问这个问题他们没有回答,但不影响效果,也让我自己学到了东西.

  • 完美解决python中ndarray 默认用科学计数法显示的问题

    机器环境: Python 3.6.4 numpy==1.14.0 pandas==0.22.0 解决方法: np.set_printoptions(suppress=True) 默认情况下,ndarray数组采用科学计数法显示: 加入代码后: 以上这篇完美解决python中ndarray 默认用科学计数法显示的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 完美解决vue 中多个echarts图表自适应的问题

    看代码吧~ <div class="echarts"> <IEcharts :option="bar" ref="echarts"></IEcharts> </div> mounted () { this.selfAdaption () }, methods: { //echarts自适应 selfAdaption () { const self = this: setTimeout(() =>

随机推荐