完美解决PHP中的Cannot modify header information 问题
我就遇到这种问题,网上找到这个解决的方案,就收藏下
写PHP的朋友们肯定遇到过这样一个问题:通过header函数改变http协议头的时候,会出现一个类似下面格式的warning:
复制代码 代码如下:
Warning: Cannot modify header information - headers already sent by
这是为什么呢?因为在使用header函数之前,您不能输出任何东西,包括用echo或var_dump等输出函数的输出,还有在<?php之前的空格 。不过有的时候,我们并没有输出任何东西,却还是会出现这个错误,这是因为我们的文件包含了BOM签名,我们必须把它去掉。下面我们就来讨论这个问题。
请看测试代码:
复制代码 代码如下:
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提示了,问题解决。
时间: 2013-08-10
get_headers() 是PHP系统级函数,他返回一个包含有服务器响应一个 HTTP 请求所发送的标头的数组.如果失败则返回 FALSE 并发出一条 E_WARNING 级别的错误信息(可用来判断远程文件是否存在). 函数定义 array get_headers ( string $url [, int $format = 0 ] ) 参数 url 目标 URL format 如果将可选的 format 参数设为 1,则 get_headers() 会解析相应的信息并设定数组的键名. 示例
PHP的header函数 可以很少代码就能实现HTML代码中META 标签这里只说用 header函数来做页面的跳转 1. HTML代码中页面的跳转的代码HTML meta refresh 刷新与跳转(重定向)页面refresh 属性值 -- 刷新与跳转(重定向)页面* refresh用于刷新与跳转(重定向)页面* refresh出现在http-equiv属性中,使用content属性表示刷新或跳转的开始时间与跳转的网址* 引用网址:http://www.dreamdu.com/xhtml/re
在php中判断一个文件或目录是否存在,大家通常都会想到is_file和file_exists两个函数.但这两个函数再判断一个远程url文件是否存在的问题上还是会存在这样那样的问题.这里作者将和大家分享一种利用php get_headers函数来判断远程url文件是有效否存在的办法. 关于php get_headers函数的作用及用法,可以参考本站文章: php中get_headers函数的作用及用法的详细介绍下面来具体说如何利用php get_headers却判断url的真实有效性. 通过该函数
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 // 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
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 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
如下所示: 复制代码 代码如下: //定义编码 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
设置允许访问的域名: 1.允许全部的域名访问 header("Access-Control-Allow-Origin:*"); 2.允许指定域名访问 header( 'Access-Control-Allow-Origin:http://a.test.com' ); 设置允许访问的请求方式: 1.一种或者多种 header('Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE'); 2.全部 header('Access-Contr
这涉及到4种头标类型: Last-Modified(最后修改时间); Expires(有效期限); Pragma(编译指示): Cache-Control(缓存控制); 前三个头标属于HTTP1.0标准.头标Last-Modified使用UTC日期时间值.如果缓存系统发现Last-Modified值比页面缓存版本的更接 近当前时间,他就知道应该使用来自服务器的新版本. Expires 表明了缓存版本何时应该过期(格林威治标准时间).把它设置为一个以前的时间就会强制使用服务器上的页面. Pragm
如果您刚刚开始学习PHP,可能有许多函数需要研究,今天我们就来学习一下PHP Header()的使用方法,更多的使用说明,请您参照PHP中文手册,下面是关于header函数的详细使用说明 header实现404无法找到页面 复制代码 代码如下: Header("HTTP/1.1 404 Not Found"); 针对apache配置中的ErrorDocument 404 /404.php功能,把nginx配置中的 复制代码 代码如下: error_page 404 /404.php;
本文实例讲述了Node.js设置HTTP头的方法.分享给大家供大家参考,具体如下: server.js //basic server的配置文件 var port = 3000; var server = require('./basicserver').createServer(); server.useFavIcon("localhost", "./docroot/favicon.png"); server.addContainer(".*",
void header ( string $string [, bool $replace = true [, int $http_response_code ]] ) : Send a raw HTTP header 下面有一些使用header的几种用法: 1.使用header函数进行跳转页面: header('Location:'.$url); 其中$url就是将要跳转的url了. 这种用法的注意事项有以下几点: •Location和":"之间不能有空格,否则会出现错误(注释:我刚
本文实例讲述了php禁用函数设置及查看方法.分享给大家供大家参考,具体如下: 打开PHP.INI,找到这行: disable_functions = 在后面那里加上要禁用的函数,如禁用多个函数,要用半角逗号 , 分开 给个例子: 复制代码 代码如下: disable_functions = passthru,exec,system,popen,chroot,scandir,chgrp,chown,escapesh ellcmd,escapeshellarg,shell_exec,proc_ope
本文实例讲述了php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证的方法.分享给大家供大家参考,具体如下: 在php中,可以使用Header函数做一些有趣的事情,用户验证就是其中一个很有意思的功能.具体用法: Header("WWW-Authenticate: Basic realm="USER LOGIN""); Header("HTTP/1.0 401 Unauthorized"); 在页首设计这两个Hea
header()函数使用说明: 一.作用: ~~~~~~~~~ PHP只是以HTTP协议将HTML文档的标头送到浏览器,告诉浏览器具体怎么处理这个页面,至于传送的内容则需要熟悉一下HTTP协议了,与PHP无关了,可参照http://www.w3.org/Protocols/rfc2616/rfc2616. 传统的标头一定包含下面三种标头之一,并只能出现一次. Location: xxxx:yyyy/zzzz Conte
jquery是js的类库,js本身不能操作header,因为js是在浏览器加载页面过程中才开始执行的header需要服务器端执行操作 如果是ajax,是可以设置header $.ajax({ url: "", data: {}, type: "GET", beforeSend: function(xhr){xhr.setRequestHeader('X-Test-Header', 'test-value');},//这里设置header success: funct