首页 > 语言 > PHP > 正文

PHP header() 函数使用方法总结

2024-09-04 11:48:41
字体:
来源:转载
供稿:网友

header() 函数向客户端发送原始的 HTTP 报头,主要包括有HTTP协议的版本、状态代码、原因短语等我们常用于跳转页面,状态发送与文件下载,下面我们一起来看看.

header分为三部分:

第一部分为HTTP协议的版本(HTTP-Version);

第二部分为状态代码(Status);

第三部分为原因短语(Reason-Phrase);

header()函数使用说明:

一、作用:

PHP只是以HTTP协议将HTML文档的标头送到浏览器,告诉浏览器具体怎么处理这个页面,至于传送的内容则需要熟悉一下HTTP协议了,与PHP无关了,可参照.http://www.w3.org/Protocols/rfc2616/rfc2616.

传统的标头一定包含下面三种标头之一,并只能出现一次.

  1. Location:  xxxx:yyyy/zzzz    
  2. Content-Type:  xxxx/yyyy    
  3. Status:  nnn  xxxxxx   

二、先来了解一下HTTP协议的运作方式

HTTP协议是基于请求/响应范式的,一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容,服务器接到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容.

它分四个过程,在HTTP协议中,服务端是指提供HTTP服务的部分,客户端是指你使用的浏览器或者下载工具等等。在通讯时,由客户端发出请求连接,服务端建立连接,然后,客户端发出HTTP请求(Request),服务端返回响应信息(Respond),由此完成一个HTTP操作.

三、HTTP协议状态码表示的意思

1××  保留

2××  表示请求成功地接收

3××  为完成请求客户需进一步细化请求

4××  客户错误

5××  服务器错误

例,代码如下:

  1. // fix 404 pages: 用这个header指令来解决URL重写产生的404 header 
  2. header(‘HTTP/1.1 200 OK’); 
  3.  
  4. // set 404 header: 页面没找到 
  5. header(‘HTTP/1.1 404 Not Found’); 
  6.  
  7. // 页面被永久删除,可以告诉seo/seo.html" target="_blank">搜索引擎更新它们的urls 
  8. // set Moved Permanently header (good for redrictions) 
  9. // use with location header 
  10. header(‘HTTP/1.1 301 Moved Permanently’); 
  11. // 访问受限 
  12. header(‘HTTP/1.1 403 Forbidden’); 
  13. // 服务器错误 
  14. header(‘HTTP/1.1 500 Internal Server Error’); 
  15.  
  16. // 重定向到一个新的位置 
  17. // redirect to a new location: 
  18. header(‘Location: http://www.m-bang.com); 
  19.  
  20. 延迟一段时间后重定向 
  21. // redrict with delay: 
  22. header(‘Refresh: 10; url=http://www.sina.com.cn’); 
  23. print ‘You will be redirected in 10 seconds’; 
  24.  
  25. // 覆盖 X-Powered-By value 
  26. // override X-Powered-By: PHP: 
  27. header(‘X-Powered-By: PHP/4.4.0′); 
  28. header(‘X-Powered-By: Brain/0.6b’); 
  29.  
  30. // 内容语言 (en = English) 
  31. // content language (en = English) 
  32. header(‘Content-language: en’); 
  33.  
  34. //最后修改时间 (在缓存的时候可以用到) 
  35. // last modified (good for caching) 
  36. $time = time() – 60; // or filemtime($fn), etc 
  37. header(‘Last-Modified: ‘.gmdate(‘D, d M Y H:i:s’, $time).’ GMT’); 
  38.  
  39. // 告诉浏览器要获取的内容还没有更新 
  40. // header for telling the browser that the content 
  41. // did not get changed 
  42. header(‘HTTP/1.1 304 Not Modified’); 
  43.  
  44. // 设置内容的长度 (缓存的时候可以用到): 
  45. // set content length (good for caching): 
  46. header(‘Content-Length: 1234′); 
  47.  
  48. // 用来下载文件: 
  49. // Headers for an download: 
  50. header(‘Content-Type: application/octet-stream’); 
  51. header(‘Content-Disposition: attachment; filename=”example.zip”‘); 
  52. header(‘Content-Transfer-Encoding: binary’); 
  53.  
  54. // 禁止缓存当前文档: 
  55. // load the file to send:readfile(‘example.zip’); 
  56. // Disable caching of the current document: 
  57. header(‘Cache-Control: no-cache, no-store, max-age=0, must-revalidate’); 
  58. header(‘Expires: Mon, 26 Jul 1997 05:00:00 GMT’); 
  59. // 设置内容类型: 
  60. // Date in the pastheader(‘Pragma: no-cache’); 
  61. // set content type: 
  62. header(‘Content-Type: text/html; charset=iso-8859-1′); 
  63. header(‘Content-Type: text/html; charset=utf-8′); 
  64. header(‘Content-Type: text/plain’); 
  65.  
  66. // plain text file 
  67. header(‘Content-Type: image/jpeg’); 
  68.  
  69. // JPG picture 
  70. header(‘Content-Type: application/zip’); 
  71.  
  72. // ZIP file 
  73. header(‘Content-Type: application/pdf’); 
  74.  
  75. // PDF file 
  76. header(‘Content-Type: audio/mpeg’); 
  77.  
  78. // Audio MPEG (MP3,…) file 
  79. header(‘Content-Type: application/x-shockwave-flash’); 
  80. //开源代码Vevb.com 
  81. // 显示登录对话框,可以用来进行HTTP认证 
  82. // Flash animation// show sign in box 
  83. header(‘HTTP/1.1 401 Unauthorized’); 
  84. header(‘WWW-Authenticate: Basic realm=”Top Secret”‘); 
  85. print ‘Text that will be displayed if the user hits cancel or ‘; 
  86. print ‘enters wrong login da 
  87. ta’; 

现在表单的填写,我们可以用AJAX对用户随时进行验证,进行友好的提示,但是在用户没有留意AJAX友好提示,提交了错误的表单,跳回原页,而填写的信息却全部丢失了,要支持页面回跳,有以下的办法:

1.使用session_cache_limiter方法:session_cache_limiter(‘private,must-revalidate’);但是要值得注意的是 session_cache_limiter()方法要写在session_start()方法之前才有用;

2.用header来设置控制缓存的方法: header(‘Cache-control:private,must-revalidate’);

页面跳转要注意的几个问题总结:

1、location和“:”号间不能有空格,否则会出错.

2、在用header前不能有任何的输出.

3、header后的PHP代码还会被执行.

下面是和asp中重定向response.redirect的比较:

例1,代码如下:

response.redirect "../test.asp" 

header("location:../test.php"); 

两者区别:

asp的redirect函数可以在向客户发送头文件后起作用,如代码如下:

  1. <html><head></head><body>  
  2. <%response.redirect "../test.asp"%>  
  3. </body></html>  
  4. //查是php中下例代码会报错:  
  5. <html><head></head><body>  
  6. <?  
  7. header("location:../test.php");  
  8. ?>  
  9. </body></html>  
  10. //只能这样:  
  11. <?  
  12. header("location:../test.php");  
  13. ?> 
  14. <html><head></head><body>...</body></html>  

即header函数之前不能向客户发送任何数据.

例2,asp中,代码如下:

  1. <html><head></head><body>  
  2. <%  
  3. response.redirect "../a.asp"  
  4. response.redirect "../b.asp"  
  5. %>  
  6. </body></html>  
  7. //结果是重定向a.asp文件.  
  8. //php呢?  
  9. <?  
  10. header("location:../a.php");  
  11. header("location:../b.php");  
  12. ?>  
  13. <html><head></head><body></body></html>  

我们发现它重定向b.php.

原来在asp中执行redirect后不会再执行后面的代码.而php在执行header后,继续执行下面的代码.在这方面上php中的header重定向不如asp中的重定向.有时我们要重定向后,不能执行后面的代码:一般地我们用如下代码:

  1. if(...)  
  2. header("...");  
  3. else  
  4. {  
  5. ...  

但是我们可以简单的用下面的方法:

  1. if(...)  
  2. { header("...");exit();}  

还要注意的是,如果是用Unicode(UTF-8)编码时也会出现问题,需要调整缓存设置,代码如下:

  1. <[email=%@]%@LANGUAGE="VBSCRIPT[/email]" CODEPAGE="936"%>  
  2. <%if Request.ServerVariables("SERVER_NAME")="s.111cn.net" then  
  3. response.redirect "news/index.htm"  
  4. else%>  
  5. <%end if%>  
  6. <script>  
  7. var url = location.href;  
  8. if(url.indexOf('http://www.Vevb.com/')!=-1)location.href='/index/index.htm';  
  9. if(url.indexOf('http://www.zhutiy.com/')!=-1)location.href='/index1/index.htm';  
  10. if(url.indexOf('http://www.Vevb.com/')!=-1)location.href='/cn/index.asp';  
  11. if(url.indexOf('http://www.baidu.com/')!=-1)location.href='/cn/index.asp';  
  12. </script>

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表