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