在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: attachment; filename=”xxxxx”
在PHP中如何寫?
1、跳轉:
代碼如下
復制代碼
header(“Location: http://www.example.com/”);
2、指定內容:
代碼如下
復制代碼
header(‘Content-type: application/pdf’);
3、附件:
代碼如下
復制代碼
header(‘Content-type: application/pdf’); // 指定內容格式
header(‘Content-Disposition: attachment; filename=”downloaded.pdf”‘); // 指定內容為附件
readfile(‘original.pdf’); // 打開文件,並輸出
最後要提醒大家注意一點,所有頭信息都必須在體內容之前,如果一旦有任何輸出了的話,header函數寫的頭信息就沒用了。比如,在文件最開頭 的<?php 處,如果前面有空格或者有空行,那header函數就沒用了(其實可以通過設置:output_buffer來解決,anyway),為什麼這樣,可以看 看HTTP協議,很簡單。
代碼如下
復制代碼
<?php
//200 正常狀態
header('HTTP/1.1 200 OK');
// 301 永久重定向,記得在後面要加重定向地址 Location:$url
header('HTTP/1.1 301 Moved Permanently');
// 重定向,其實就是302 暫時重定向
header('Location: http://www.111cn.net/');
// 設置頁面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;http://www.111cn.net/ /> 相同)
header('Refresh: 3; url=http://www.111cn.net/');
echo '10後跳轉到http://www.111cn.net';
// 重寫 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: attachment; 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 1997 05:00:00 GMT');
header('Pragma: no-cache');
//設置頁面頭信息
header('Content-Type: text/html; charset=iso-8859-1');
header('Content-Type: text/html; 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-excel; 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: attachment;filename=".$title .".xls ");
header("Content-Transfer-Encoding: binary ");