Next Previous Contents

16. PHP Hypertext PreProcessor—PostgreSQL 的伺服器端 html 嵌入命令稿語言

萬維網介面工具位於︰

前身為 Professional Home Pages (PHP 3) 而現在稱為 PHP Hypertext Pre-Processor

問題可電郵到︰

PHP 3 是一個伺服器端 html 嵌入命令稿語言。它讓你在你的 .HTML 檔中加入簡單的命令稿,像 JavaScript 般。不過,和 JavaScript 不同,PHP 獨立於伺服器。JavaScript 是一種客戶端的 html 嵌入命令稿語言,而 PHP 3 是伺服器端語言。PHP 3 的概念和 Netscape 的 LiveWire Pro 產品相似。如果你有足夠金錢,你可在其中一個被支援的操作系統執行 Netscape 的 Commerce Server,你大致可看到 LiveWire Pro。如果你喜歡快速更新又包括源程式碼的自由軟件,你大概會喜歡 PHP 3。

16.1 主要特色

標準的 CGI,FastCGI 和 Apache 模組支援 作為一個標準的 CGI 程式,PHP 3 可在執行任何 Unix 互聯網伺服器的任何 Unix 電腦上安裝。加上對新 FastCGI 標準的支援,PHP 3 可從中得到速度上的改善。作為一個 Apache 模組, PHP 3 變成 CGI 程式外 一個強勁及快如閃電的選擇。

16.2 名譽

*這程式大部分是在及為多倫多大學 (the University of Toronto)開發的。非常感謝大學 Network Development 的 Lee Oattes 具建設性的批評。

*PostgreSQL 支援的程式碼是 Adam Sussman 寫成的。

*無數其他曾協助測試及除錯的人。

16.3 PHP 3—簡史

初出現時,PHP 是一個以 Perl 寫成小巧簡單的 cgi 包裝器 (wrapper)。它的目的從不曾走出個人使用。這套裝最先名為 Personal Home Page Tools,後來變為 Personal Home Page Construction Kit。

另有一工具是寫來簡化在網頁中嵌入 SQL 查詢的工作。它基本上是另一個 CGI 包裝器,能分析 (parsed) SQL 查詢及簡化建立根據這些查詢的表格和列表的工作。這工具名為FI (Form Interpreter)。

PHP/FI 2.0 版完全重寫這兩套軟件,將之合而為一。它已進化為一個可嵌入 HTML 檔中的簡單電腦語言。雖然仍堅持原有的簡稱,但它已再不合用。現在,PHP/FI 用在整個網站的情況遠多過個人網頁設定。不論名叫什麼,它籍著把所簡單的命令稿直接嵌入 HTML 檔中,消除大量小型 Perl cgi 程式的需要。這樣會加快你的網頁,因為 fork 多次 Perl 的困擾已經消除。它也簡化了管理大型網站的工作,因為你可把網頁的所有部分放在一個 html 檔中。加上多種資料庫的支援,可使用資料庫的網的開發變得簡單。很多人覺得嵌入查詢比分別建立 HTML 和 CGI 檔簡單得多。

在這文件中,任何提及 PHP、FI 或 PHP/FI 的地方都指同一事物。PHP 和 FI 只有概 念上的分別。它們可在同一源程式碼散佈中建立。現在,PHP/FI 已改名為 PHP 3。

16.4 那麼,我能用 PHP/FI 做什麼?

如果你使用 PHP/FI,你首先會注意到它在頁尾加上這網頁曾被瀏覽過多少次的資料(如果你在在編譯時選取了 access logging)。這只是 PHP/FI 所做的一小部分。它的另一個重要角色是作為一個表格直譯 cgi 程式 (form interpreter cgi),這也就是 FI 的意思。例如,如果你在一個網頁中建立了一個表格,你需要 一個程式來處理表格上的資料。即使你只想把資料傳送到另一網頁,你也需要 cgi 程式的幫助。PHP/FI 使得取得和處理表格的資料極為容易。

16.5 一個簡單的例子︰

假設你有一張表格︰

<FORM ACTION="/cgi-bin/php.cgi/~userid/display.html" METHOD=POST>
<INPUT TYPE="text" name="name">
<INPUT TYPE="text" name="age">
<INPUT TYPE="submit">
<FORM>
你的 display.html 便可包括類似的東西︰
< ?echo "Hi $ name, you are $ age years old!<p>" >
就是這樣簡單!PHP/FI 自動為每個表格輸入欄位產生一個變數。之後你便可在 ACTION URL 檔中使用這些變數。

在你找出如何使用變數之後的步驟就是在網頁中試用一些邏輯流程標籤。例如,如果你想根據用者輸入顯示不同訊息,你可使用 if/else 邏輯。在上面的例子,我們可改變 display.html,使得不同東西會根據用戶輸入顯示出來︰

<?
    if($age>50);
        echo "Hi $name, you are ancient!<p>";
    elseif($age>30);
        echo "Hi $name, you are very old!<p>";
    else;
        echo "Hi $name.";
    endif;
>
PHP/FI 提供一種非常強勁的命令稿語言,能做到的事比以上簡單的例子多很多。欲知詳情,請參閱有關 PHP/FI Script Language 的章節。

你也可使用 PHP/FI 來設定有什麼人能看到你的網頁。這可使用一個內建的設定畫面做到。例如,籍著它你可指定只有某些網域的人可看到你的網頁,或建立一些規則來用密碼保護某些網頁。欲知詳情,請參閱有關 Access Control 的章節。

PHP/FI 也有能力接收任何依照 RFC-1867 規定的瀏覽器上傳的檔案。這特色使用者能上傳文字或二元檔。籍著 PHP/FI 的存取控制和邏輯功能,你可全面控制淮許誰上傳及上傳後做什麼。欲知詳情,請參閱有關 File Upload 的章節。

PHP/FI 支援 PostgreSQL 資料庫套件。它支援在 .HTML 檔中嵌入 SQL 查詢。欲知詳情,請參閱有關 PostgreSQL Support 的章節。

PHP/FI 支援 mysql 資料庫套件。它支援在 .HTML 檔中嵌入 SQL 查詢。欲知詳情,請參閱有關 mysql Support 的章節。

16.6 CGI 改向 (CGI Redirection)

Apache 1.0.x 摘要

使用 Apache 伺服器的 cgi 改向模組是執行 PHP/FI 的一個好方法。請注意你無須擔心改向模組,如果你使用 PHP/FI 的 Apache 模組版本 (Apache module version)。有兩個這類改向模組。一個是 Dave Andersen 開發的︰

它可在以下地方找到 另一個已包括在 Apache 中,名為 mod_actions.c。這些模組極為相似,只是在用法上有少許差別。兩個都測試過,能和 PHP/FI 順利合作。

查看 Apache 的文件關於如何加入一個模組。一般來說,你把模組名稱加到一個名為 Configuration 的檔案中。如果你使用 mod_actions 模組,你要加的一句是︰

Module action_module mod_actions.o

如果你使用 mod_cgi_redirect 模組,加上以下一句︰

Module cgi_redirect_module mod_cgi_redirect.o

重新編譯你的 httpd 及安裝它。要設定 cgi 改向你需要在你的 mime.types 檔中建立新的 mime 類型,或在你的 srm.conf 檔中使用 AddType 指令來加上 mime 類型。所加上的 mime 類型應類似︰

     application/x-httpd-php phtml
如果你使用 mod_actions.c 模組,你需在 srm.conf 檔中加上以下一行︰
     Action application/x-httpd-php /cgi-bin/php.cgi
如果你使用 mod_cgi_redirect.c 模組,你需在 srm.conf 檔中加上以下一行︰
     CgiRedirect application/x-httpd-php /cgi-bin/php.cgi
不要同時使用 mod_actions.c 和 mod_cgi_redirect.c。

安裝及正確設定了這些 cgi 改向模組後,你只需把延伸檔名定為 .phtml,便可以指定這檔案由 php/fi 分析。此外,如果你在 srm.conf 檔的 DirectoryIndex 設定行加上 index.phtml,最上層的網頁便會自動由 php 分析,如果你的 index 檔名為 index.phtml。

Netscape HTTPD

你可籍 Netscape Server CGI Redirection 模組來指定自動把某些延伸檔名的檔案的要求改向給 PHP/FI。這模組可在 PHP/FI 網頁的 File Archieves 中找到。套件中的 README 明確地解釋了如何設定它來用於 PHP/FI。

NCSA HTTPD

目前,NCSA 並不支援模組,所以,要使用 cgi 改向的話,你要修改伺服器的源程式碼。一個對 NCSA 1.5 做這工作的嵌補在在 PHP/FI File Archieves 中找到。

16.7 在指令行執行 PHP/FI

如果你建立了 CGI 版本的 PHP/FI,你只需在指令行輸入 php.cgi filename,而filename 是你想分析的檔案。你可建立獨立的 PHP/FI 命令稿,只需把手稿的第一行寫為類似︰

    #!/usr/local/bin/php.cgi -q
“-q”阻止印出 HTTP 標頭。喜歡的話,你可不用請選擇。
Next Previous Contents