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