php header 404问题

php header解决乱码问题及其他乱码问题
php header解决乱码问题及其他乱码问题,有需要的朋友可以参考下。转自http://www.jb51.net/article/22501.htmphp的header来定义一个php页面为utf编码或GBK编码php页面为utf编码header(&Content-type: text/ charset=utf-8&);php页面为gbk编码header(&Content-type: text/ charset=gb2312&);php页面为big5编码header(&Content-type: text/ charset=big5&);通常情况以上代码放在php页面的首页用header或meta实现PHP页面编码的区别一、页面编码1. 使用 &META http-equiv=&content-type& content=&text/ charset=xxx&& 标签设置页面编码这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx可以为GB2312,GBK,UTF-8(和MySQL不同,MySQL是 UTF8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会 发现有了这句还是不行,不管xxx是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。请注意,&meta&是属于html信息的,仅仅是一个声明,它起作用表明服务器已经把HTML信息传到了浏览器。2. header(&content-type:text/ charset=xxx&);这个函数header()的作用是把括号里面的信息发到http标头。如果括号里面的内容为文中所说那样,那作用和&META&标签基本相同,大家对照第一个看发现字符都差不多的。但是不同的是如果有这段 函数,浏览器就会永远采用你所要求的xxx编码,绝对不会不听话,因此这个函数是很有用的。为什么会这样呢?那就得说说HTTPS标头和HTML信息的差 别了:https标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串。因为meta标签是属于html信息的,所以header()发送的内容先到达浏览器,通俗点就是header()的优先级高于meta(不知道可 不可以这样讲)。加入一个php页面既有header(&content-type:text/ charset=xxx&),又有&META http-equiv=&content-type& content=&text/ charset=xxx&&,浏览器就只认前者http标头而不认meta了。当然这个函数只能在php页面内使用。同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的Apache的原因了。3. AddDefaultCharsetApache 根目录的 conf 文件夹里,有整个Apache的配置文档httpd.conf。用文本编辑器打开httpd.conf,第708行(不同版本可能不同)有AddDefaultCharset xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件https标头里的字符集为你默认的xxx字符集。有这行,就相当于给每个文件都 加了一行header(&content-type:text/ charset=xxx&)。这下就明白为什么明明meta设置了是utf-8,可浏览器始终采用gb2312的原因。如果网页里有header(&content-type:text/ charset=xxx&),就把默认的字符集改为你设置的字符集,所以这个函数永远有用。如果把AddDefaultCharset xxx前面加个“#”,注释掉这句,而且页面里不含header(&content-type…&),那这个时候就轮到meta标签起作用了。总结:来个排序header(&content-type:text/ charset=xxx&)AddDefaultCharset xxx&META http-equiv=&content-type& content=&text/ charset=xxx&&如果你是web程序员,给你的每个页面都加个header(&content-type:text/ charset=xxx&),保证它在任何服务器都能正确显示,可移植性强。至于那句AddDefaultCharset xxx,要不要注释就仁者见仁了。反正我是注释掉了,不过我写页子也要写header(),便于放到服务器上能正常显示。二、数据库编码PHP 程序在查询数据库之前,首先执行 mysql_query(“SET NAMES xxxx”);其中 xxxx 是你网页的编码(charset=xxxx),如果网页中 charset=utf8,则 xxxx=utf8,如果网页中 charset=gb2312,则xxxx=gb2312,几乎所有WEB程序,都有一段连接数据库的公共代码,放在一个文件里,在这文件里,加入 mysql_query(“set names”)就可以了。SET NAMES 显示客户端发送的 SQL 语句中使用什么字符集。因此,SET NAMES 'utf-8'语句告诉服务器“将来从这个客户端传来的信息采用字符集utf-8”。它还为服务器发送回客户端的结果指定了字符集。(例如,如果你使用一 个SELECT语句,它表示列值使用了什么字符集。)PHP页面编码统一MySQL数据库编码、html页面编码、PHP或html文件本身编码要全部一致。  1、MySQL数据库编码:建立数据库时指定编码(如gbk_chinese_ci),建立数据表、建立字段、插入数据时不要指定编码,会自动继承数据库的编码。数据库连接时,也有编码,可以在连接完数据库后,执行mysql_query('SET NAMES gbk');//将gbk换成你的编码,如utf8。  2、html页面的编码,指的是这一行的设置:&meta http-equiv=&Content-Type& content=&text/ charset=gbk& /&  3、PHP或html文件本身的编码:用editplus打开php文件或html文件,另存时,选择的编码,如果数据库和页面编码是gbk,则这儿的编码选择ansi;如果数据库和页面编码是utf-8,则这儿也选择utf-8。  4、另外要注意的是,Javascript或Flash中传递的数据是utf-8编码,如果数据库和页面编码是gbk,要进行转码,然后写入数据库。iconv('utf-8', 'gbk', $content);5、在PHP程序中,可以加上一行,来指定PHP源程序的编码:header('Content-type: text/ charset=gbk');
最新教程周点击榜
微信扫一扫投诉建议、广告投放、友情链接,联系QQ:
PHP中header()函数有什么用?常见header 状态
Loading...
在php中header()函数是很大的作用可以发送各种状态代码,也可以实现一些输出下载,下面我们一起来看看一些相关实例吧。 什么是头信息?
这里只作简单解释,详细的自己看http协议。
在 HTTP协议中,服务器端的回答(response)内容包括两部分:头信息(header) 和 体内容,这里的头信息不是HTML中的&head&&/head&部分,同样,体内容也不是&BODY&& /BODY&。头信息是用户看不见的,里面包含了很多项,包括:服务器信息、日期、内容的长度等。而体内容就是整个HTML,也就是你所能看见的全 部东西。
头信息有什么用呢?
头信息的作用很多,最主要的有下面几个:
1、跳转:当浏览器接受到头信息中的 Location: xxxx 后,就会自动跳转到 xxxx 指向的URL地址,这点有点类似用 js 写跳转。但是这个跳转只有浏览器知道,不管体内容里有没有东西,用户都看不到。
2、指定网页的内容: 同样一个XML文件,如果头信息中指定:Content-type: application/xml 的话,浏览器会将其按照XML文件格式解析。但是,如果头信息中是:Content-type: text/xml 的话,浏览器就会将其看作存文本解析。(浏览器不是按照扩展名解析文件的)
3、附件:不知道大家有没 有注意,有些时候在一些网站下载东西,点下载连接以后,结果浏览器将这个附件当成网页打开了,里面显示的都是乱码,这个问题也和头信息有关。有时候浏览器 根据Content-type 来判断是打开还是保存,这样有时就会判断错误(主要是网站设计者忘记写Content-type)。其实,还有一个可以来指定该内容为附件、需要保存,这 个就是:Content-Disposition: filename=&xxxxx&
在PHP中如何写?
header(&Location: /&);
2、指定内容:
header(&Content-type: application/pdf&);
header(&Content-type: application/pdf&); // 指定内容格式
header(&Content-Disposition: filename=&downloaded.pdf&&); // 指定内容为附件
readfile(&original.pdf&); // 打开文件,并输出
最后要提醒大家注意一点,所有头信息都必须在体内容之前,如果一旦有任何输出了的话,header函数写的头信息就没用了。比如,在文件最开头 的&?php 处,如果前面有空格或者有空行,那header函数就没用了(其实可以通过设置:output_buffer来解决,anyway),为什么这样,可以看 看HTTP协议,很简单。
//200 正常状态
header('HTTP/1.1 200 OK');
// 301 永久重定向,记得在后面要加重定向地址 Location:$url
header('HTTP/1.1 301 Moved Permanently');
// 重定向,其实就是302 暂时重定向
header('Location: /');
// 设置页面304 没有修改
header('HTTP/1.1 304 Not Modified');
// 显示登录框,
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm=&登录信息&');
echo '显示的信息!';
// 403 禁止访问
header('HTTP/1.1 403 Forbidden');
// 404 错误
header('HTTP/1.1 404 Not Found');
// 500 服务器错误
header('HTTP/1.1 500 Internal Server Error');
// 3秒后重定向指定地址(也就是刷新到新页面与 &meta http-equiv=&refresh& content=&10;/ /& 相同)
header('Refresh: 3; url=/');
echo '10后跳转到';
// 重写 X-Powered-By 值
header('X-Powered-By: PHP/5.3.0');
header('X-Powered-By: Brain/0.6b');
//设置上下文语言
header('Content-language: en');
// 设置页面最后修改时间(多用于防缓存)
$time = time() - 60; //建议使用filetime函数来设置页面缓存时间
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT');
// 设置内容长度
header('Content-Length: 39344');
// 设置头文件类型,可以用于流文件或者文件下载
header('Content-Type: application/octet-stream');
header('Content-Disposition: filename=&example.zip&');
header('Content-Transfer-Encoding: binary');
readfile('example.zip');//读取文件到客户端
//禁用页面缓存
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul :00 GMT');
header('Pragma: no-cache');
//设置页面头信息
header('Content-Type: text/ charset=iso-8859-1');
header('Content-Type: text/ charset=utf-8');
header('Content-Type: text/plain');
header('Content-Type: image/jpeg');
header('Content-Type: application/zip');
header('Content-Type: application/pdf');
header('Content-Type: audio/mpeg');
header('Content-Type: application/x-shockwave-flash');
//.... 至于Content-Type 的值 可以去查查 w3c 的文档库,那里很丰富
例,文件下载
header(&Content-Type: application/vnd.ms- charset=UTF-8&);
header(&Pragma: public&);
header(&Expires: 0&);
header(&Cache-Control: must-revalidate, post-check=0, pre-check=0&);
header(&Content-Type: application/force-download&);
header(&Content-Type: application/octet-stream&);
header(&Content-Type: application/download&);
header(&Content-Disposition:filename=&.$title .&.xls &);
header(&Content-Transfer-Encoding: binary &);
IT技术书籍推荐:
利用Python进行数据分析
麦金尼 (Wes McKinney) (作者), 唐学韬 (译者), 等 (译者)
《利用Python进行数据分析》内容简介:学习NumPy(NumericalPython)的基础和高级知识;从pandas库的数据分析工具开始利用高性能工具对数据进行加载、清理、转换、合并以及重塑;利用matpIotlib创建散点图以及静态或交互式的可视化结果;利用pandas的groupby功能对数据集进行切片、切块和汇总操作;处理各种各样的时间序列数据。
相关推荐:1、2、3、4、5、6、7、8、9、10、
随机关键词:
正在加载...
最新微信头条PHP header() 函数详细说明(301、404等错误设置)_最火下载站
您的位置: >
> PHP header() 函数详细说明(301、404等错误设置)
PHP header() 函数详细说明(301、404等错误设置)
如果您刚刚开始学习PHP,可能有许多函数需要研究,今天我们就来学习一下PHP Header()的使用方法,更多的使用说明,请您参照,下面是关于header函数的详细使用说明
不管页面有多少header,它会执行最后一个,不过是有条件的,例如:
header('Location:http://www.liehuo.net'); header('Location:'); header('Location:');&
这个就会跳到百度
header('Location:http://www.liehuo.net');echo '烈火网; header('Location:'); header('Location:');
这个就会跳到google 下面是关于header函数的详细使用说明 一、作用: ~~~~~~~~~ PHP只是以HTTP协议将HTML文档的标头送到浏览器,告诉浏览器具体怎么处理这个页面,至于传送的内容则需要熟悉一下HTTP协议了,与PHP无关了 传统的标头一定包含下面三种标头之一,并只能出现一次。
Location: xxxx:yyyy/zzzz Content-Type: xxxx/yyyy Status: nnn xxxxxx&
二、先来了解一下HTTP协议的运作方式 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HTTP协议是基于请求/响应范式的。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是 MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。 它分四个过程,在HTTP协议中,服务端是指提供HTTP服务的部分,客户端是指你使用的浏览器或者下载工具等等。在通讯时,由客户端发出请求连接,服务端建立连接;然后,客户端发出HTTP请求(Request),服务端返回响应信息(Respond),由此完成一个HTTP操作。
HTTP状态检测(HTTP Header):
三、HTTP协议状态码表示的意思 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1&&  保留 2&&  表示请求成功地接收 3&&  为完成请求客户需进一步细化请求 4&&  客户错误 5&&  服务器错误 &
四、操作实例: ~~~~~~~~~~~~~ &1& 重定向功能,这种最常见
&?php && Header(&Location: http://www.liehuo.net/&); ?& &&2& 强制用户每次访问这个页面时获取最新资料,而不是使用存在客户端的缓存。
代码 &?php //告诉浏览器此页面的过期时间(用格林威治时间表示),只要是已经过去的日期即可。 header(&Expires: Mon, 26 Jul :00 GMT&); //告诉浏览器此页面的最后更新日期(用格林威治时间表示)也就是当天,目的就是强迫浏览器获取最新资料 header(&Last-Modified: & . gmdate(&D, d M Y H:i:s&) . &GMT&); //告诉客户端浏览器不使用缓存 header(&Cache-Control: no-cache, must-revalidate&); //参数(与以前的服务器兼容),即兼容HTTP1.0协议 header(&Pragma: no-cache&); //输出MIME类型 header(&Content-type: application/file&); //文件长度 header(&Content-Length: 227685&); //接受的范围单位 header(&Accept-Ranges: bytes&); //缺省时文件保存对话框中的文件名称 header(&Content-Disposition: filename=$filename&); ?&&
&3& 输出状态值到浏览器,主要用于访问权限控制
&?php header('HTTP/1.1 401 Unauthorized'); header('status: 401 Unauthorized'); ?&
比如要限制一个用户不能访问该页,则可设置状态为404,如下所示,这样浏览器就显示为即该页不存在
&?php header('HTTP/1.1 404 Not Found'); header(&status: 404 Not Found&); ?&
注意: 传统的标头一定包含下面三种标头之一,并只能出现一次。 Content-Type: xxxx/yyyy Location: xxxx:yyyy/zzzz Status: nnn xxxxxx 在新的多型标头规格 (Multipart MIME) 方可以出现二次以上。 使用范例 范例一: 本例使浏览器重定向到 PHP 的官方网站。
Header(&Location: http://www.liehuo.net/&);&
范例二: 要使用者每次都能得到最新的资料,而不是 Proxy 或 cache 中的资料,可以使用下列的标头
header(&Expires: Mon, 26 Jul :00 GMT&); header(&Last-Modified: & . gmdate(&D, d M Y H:i:s&) . &GMT&); header(&Cache-Control: no-cache, must-revalidate&); header(&Pragma: no-cache&);&
范例三: 让使用者的浏览器出现找不到档案的信息。
header(&Status: 404 Not Found&);
范例四:让使用者下载档案。
header(&Content-type: application/x-gzip&); header(&Content-Disposition: filename=文件名&); header(&Content-Description: PHP3 Generated Data&);
header -- 发送一个原始 HTTP 标头说明  
void header ( string string [, bool replace [, int http_response_code]] )
  header() 函数用来发送一个原始 HTTP 标头。有关 HTTP 标头的更多内容见 HTTP/1.1 规范。   可选参数 replace 指明是替换掉前一条类似的标头还是增加一条相同类型的标头。默认为替换,但如果将其设为 FALSE 则可以强制发送多个同类标头。例如:
 &?php   header('WWW-Authenticate: Negotiate');   header('WWW-Authenticate: NTLM', false);  ?&
  第二个可选参数 http_response_code 强制将 HTTP 响应代码设为指定值(此参数是 PHP 4.3.0 新加的)。   有两种特殊的 header 调用。第一种是标头以字符串&HTTP/&(大小写不重要)开头的,可以用来确定要发送的 HTTP 状态码。例如,如果配置了 Apache 用 PHP 来处理找不到文件的错误处理请求(使用 ErrorDocument 指令),需要确保脚本产生了正确的状态码。
&?php  header(&HTTP/1.0 404 Not Found&) ?&
  注: HTTP 状态码标头行总是第一个被发送到客户端,而并不管实际的 header() 调用是否是第一个。除非 HTTP 标头已经发送出去,任何时候都可以通过用新的状态行调用 header() 函数来覆盖原先的。
  HTTP状态检测(HTTP Header):
  第二种特殊情况是以&Location:&标头。它不只是把这个标头发送回浏览器,它还将一个 REDIRECT(302)状态码返回给浏览器,除非之前已经发出了某个 3xx 状态码。
 &?php   header(&Location: /&); /* 重定向浏览器 */   /* 确保重定向后,后续代码不会被执行 */     ?&
  注: HTTP/1.1 标准需要一个绝对地址的 URI 做为 Location: 的参数, 但有一些客户端支持相对 URI。通常可以使用 $_SERVER['HTTP_HOST']、$_SERVER['PHP_SELF'] 及 dirname() 函数来自己从相对 URI 产生出绝对 URI:&
 &?php   header(&Location: http://%22.$_server['http_host'/]   . rtrim(dirname($_SERVER['PHP_SELF']), '/\\')   .&/&.$relative_url);  ?&
  注: 即使启用了 session.use_trans_sid,Session ID 也不会随着 Location 头信息被传递。必须手工用 SID 常量来传递。      PHP 脚本通常会产生一些动态内容,这些内容必须不被浏览器或代理服务器缓存。很多代理服务器和浏览器都可以被下面的方法禁止缓存:
 &?php   header(&Cache-Control: no-cache, must-revalidate&); // HTTP/1.1   header(&Expires: Mon, 26 Jul :00 GMT&); // 过去的时间  ?&
  注: 可能会发现即使不输出上面所有的代码,网页也没有被缓冲。用户有很多选项可以设置来改变浏览器的默认缓存行为。通过发送上述标头,应该可以覆盖任何可以导致脚本页面被缓存的设置。      另外,当使用了 session 时,利用 session_cache_limiter() 函数和 session.cache_limiter 选项可以用来自动产生正确的缓存相关标头。      要记住 header() 必须在任何实际输出之前调用,不论是来自普通的 HTML 标记,空行或者 PHP。有一个常见错误就是在通过 include(),require() 或一些其它的文件存取类函数读取代码时,有一些空格或者空行在调用 header() 之前被发送了出去。同样在一个单独的 PHP/HTML 文件中这个错误也很普遍。
  &html&   &?php   /* 这将产生一个错误,因为在调 header()   * 之前已经输出了东西 */   header('Location: /');   ?&
  注: 自 PHP 4 起,可以通过一些输出缓冲函数来解决这个问题。代价是把所有向浏览器的输出都缓存在服务器,直到下命令发送它们。可以在代码中使用 ob_start() 及 ob_end_flush() 来实现这样的功能,或者通过修改 php.ini 中的 output_buffering 配置选项来实现,也可以通过修改服务器配置文件来实现。
附header()两个常用用法:
//设置页面编码:header('Content-Type:text/charset=gb2312');//调整页面:header('location:');
上一篇: 下一篇:PHP Header函数跳转时需要注意的一些问题-Php函数-Php教程-壹聚教程网PHP Header函数跳转时需要注意的一些问题
在PHP利用Header函数跳转时需会碰到一些无法跳转的问题,这里一聚教程小编总结了常见的三种导致无法跳转的例子与解决方法给各位,希望此例子对大家带来帮助。
在通过php的header('Location:http://www.111cn.net')做跳转时.有时会不成功.追其原因有以下几种情况:
&location和&:&号间不能有空格,否则会出错。
&在用header()前不能有任何的输出。
&header后的PHP代码还会被执行,所以在函数之前最好加上exit()来停止之后程序的执行
另外还有一个问题,算是比较低级了
&header(&location:http://www.111cn.net/&);
要求header前没有任何输出,否则会报错。
当我们以 ANSI 格式编码时(多数默认情况),可以正常实现PHP跳转。
&meta http-equiv=&Content-Type& content=&text/ charset=UTF-8& /&
有时我们需要在网页中事先判断跳转条件,如果符合则正常显示网页,而网页是以 UTF-8 格式编码,此时使用header则会报错。
原因是 UTF-8 编码在文本开始处偷偷地输出了三个字符(BOM),默认对我们不可见。因此不满足&header前没有任何输出&的条件,从而报错。
解决方法是使用Notepad++等文本编辑器打开文件,转为 UTF-8 无 BOM 编码格式,保存退出即可。
PHP header 默认302临时重定向,如需要使用301永久重定向,可使用以下代码。
&header(&HTTP/1.1 301 Moved Permanently&);
&header(&Location: http://feitsui.net/&);
如果不关注HTTP状态,可以使用JavaScript实现跳转。
&script type=&text/&&
&window.location.href=&http://www.111cn.net/&;
三,顺序问题
&&& header(&Location:/&);
&&& header(&Location:01.php&);
&&& header(&Location:03.php&);
&&& header(&Location:&);
&&& echo &111&;
&&& header(&Location:&);
&&& echo &222&;
&&& header(&Location:&);
&&& echo &333&;
如上代码为什么不跳转到header(&Location:/&);?
另外一个问题服务器读PHP文件,是读一点发送给客户端一点,还是一次读完后,才发送给客户.Javascript是怎么个读法?
&php脚本是从上往下是顺序读的,在服务器端一次性读完以后发给客户端,这个文件,当读到if时本应该发送header(&Location:/&);但是下面还有header(&Location:01.php&);
header(&Location:03.php&);
header(&Location:&);就会继续读到最后一条而echo的优先级低于低于header,当很多个header并列时就会把最后一条显示,就像显示数组一样,$forum[],当你写 echo $forum就只会把数组中的最后一条记录显示。javascript是客户端脚本,当你的页面下载后以后所有的javascript脚本文件就已经在你的电脑里面了,只有对其操作时才会有响应。
上一页: &&&&&下一页:相关内容

我要回帖

更多关于 php header 404 的文章

 

随机推荐