« 75. PHP 如何列印 URL 字串? | (回到Blog入口) | 77. 什麼是表單(form)? »

76. 什麼是 HTTP 的 mime-type 檔頭?

jollen 發表於 October 27, 2006 8:06 PM

CGI 程式與寫在 HTML 裡面的 PHP 程式最大的不同處在於,CGI 程式是獨立的程式,不只輸出要包括完整的標籤,也要有檔頭 (header) 的輸出,輸出檔頭的目地在告訴使用者端的瀏覽器,伺服器目前所要送出的是什麼型態的資料。

例如,我們現在要輸出的是 HTML 檔案,PHP 程式就必須輸出一個告訴瀏覽器,現在所要送出的是 text/html 型態的資料。利用 PHP 提供的 header() 函數即可完成這項工作:

<?php header("Content-type: text/html"); ?> <html> </html>

要特別注意是,檔案行與行之間都是以 "\n" 換行做為區隔。我們也可以利用 echo 語法輸出檔頭,但要特別注意的是,[[輸出檔頭時,必須多空一行空白行]],也就是輸出 "\n\n" 兩個換行字元。例如:

echo "Content type: text/html\n\n"; //等於 header("Content type: text/html");

另外,檔頭的輸出必須在有入何其它資料輸出之前,例如上面的例子,我們必須先輸出檔頭,才能開始輸出正式的資料。檔頭必須是 CGI 程式裡第一筆輸出的資料,同一個程式可以輸出多個檔頭,例如:

echo "Content-type: image/gif\n"; echo "Content-length: $no_bytes\n\n";

輸出多個檔頭時,必須換行才能輸出另一個檔頭,而且很重要的一點是,檔頭結束後必須多空一行空白行,如果在檔頭結束後再輸出另一個檔頭,會發生錯誤。例如底下的寫法是不正確的:

header("Content-type: image/gif"); header("Content-length: $no_bytes");

CGI 還有其它好用的檔頭,比較常用的有:

1. Header 用途
2. Refresh 重新載入文件
3. Location Server Redirection
4. Expires 文件的到期日
5. Status request 狀態
6. Pragma 開閉或關閉文件緩衝區

例如 Refresh 檔頭用可來重新載入文件,請看底下的例子:

header("Refresh: 10; URL=index.php");

這個檔頭告訴瀏覽器,10 秒鐘後重新載入 index.php 文件。有些具時效性的網頁可以利用 Expire 檔頭來設定文件的到期日,因此有時瀏覽網頁時按上一頁會出現網頁到期的訊息。

本節只會用到 Content-type 的檔頭,用來告訴瀏覽器目前所輸出的資料類型,只要是在 MIME 裡有定義,而且 client 端支援的類型幾乎都可以輸出。

--jollen

版權聲明

請參閱頁面底部的 CC 授權條款。此外,Jollen's PHP 專欄禁止引用、修改與轉貼,如果您想與朋友分享的話,我們只允許網站連結(hyperlink)的形式。

發表一個評論

(如果你此前從未在此 Blog 上發表過評論,則你的評論必須在 Blog 主人驗證後才能顯示,請你耐心等候。)

| Top | Jollen's Forum |
Jollen's PHP 專欄採用 Attribution-NonCommercial-NoDerivs 2.5 授權條款
Copyright(c) 2001-2007,2010 www.jollen.org