<< Back to man.ChinaUnix.net

Next Previous Contents

21. PHP Hypertext PreProcessor PostgreSQL 的伺服器端 html 嵌入命令稿语言

万维网界面工具位于︰

PHP 也有一个名为 Zend 的编译器,可大幅改善表现。首先你在开发、测试和除错时使用 PHP 命令稿语言。当准备好正式使用时使用 Zend 编译器产生可迅速执行的执行档。

前身为 Professional Home Pages(PHP)而现在称为 PHP Hypertext Pre-Processor

PHP 是一个伺服器端 html 嵌入命令稿语言。它让你在你的 .HTML 档中加入简单的命令稿,像 JavaScript 般。不过,和 JavaScript 不同,PHP 独立于浏览器。JavaScript 是一种客户端的 html 嵌入命令稿语言,而 PHP 是伺服器端语言。PHP 的概念和 Netscape 的 LiveWire Pro 产品相似。如果你喜欢快速更新又包括源程序码的自由软件,你大概会喜欢 PHP 3。

21.1 主要特色

21.2 PHP 简史

初出现时,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 档中。它籍著把所简单的命令稿直接嵌入 HTML 档中,消除大量小型 Perl cgi 程序的需要。这样会加快你的网页,因为 fork 多次 Perl 的困扰已经消除。 它也简化了管理大型网站的工作,因为你可把网页的所有部分放在一个 html 档中。加上多种资料库的支持,可使用资料库的网页的开发变得简单。 很多人觉得嵌入查询比分别建立 HTML 和 CGI 档简单得多。

PHP/FI 已改名为 PHP。

21.3 那么,我能用 PHP 做什么?

如果你使用 PHP,你首先会注意到它在页尾加上这网页曾被浏览过多少次的资料 (如果你在在编译时选取了 access logging)。这只是 PHP 所做的一小部分。 它的另一个重要角色是作为一个表格直译 cgi 程序 (form interpreter cgi),这也就是首名中 FI 的意思。例如,如果你在一个网页中建立了一个表格, 你需要一个程序来处理表格上的资料。即使你只想把资料传送到另一网页,你也需要 cgi 程序的帮助。PHP 使得取得和处理表格的资料极为容易。

21.4 一个简单的例子

假设你有一张表格︰

<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 自动为每个表格输入栏位产生一个变数。之后你便可在 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 提供一种非常强劲的命令稿语言,能做到的事比以上简单的例子多很多。欲知详情, 请参阅有关 PHP Script Language 的章节。

你也可使用 PHP 来设定有什么人能看到你的网页。这可使用一个内建的设定画面做到。 例如,籍著它你可指定只有某些网域的人可看到你的网页, 或建立一些规则来用密码保护某些网页。欲知详情,请参阅有关 Access Control 的章节。

PHP 也有能力接收任何依照 RFC-1867 规定的浏览器上传的文档。 这特色使用者能上传文字或二元档。籍著 PHP 的存取控制和逻辑功能, 你可全面控制淮许谁上传及上传后做什么。欲知详情,请参阅有关 File Upload 的章节。

PHP 支持 PostgreSQL 资料库套件。它支持在 .HTML 档中嵌入 SQL 查询。

PHP 也支持 mysql 资料库套件。它支持在 .HTML 档中嵌入 SQL 查询。

21.5 CGI 改向 (Redirection)

Apache 1.0.x 摘要

使用 Apache 伺服器的 cgi 改向模块是执行 PHP 的一个好方法。 请注意你无须担心改向模块,如果你使用 PHP 的 Apache 模块版本 (Apache module version)。有两个这类改向模块。一个是 Dave Andersen 开发的︰

它可在以下地方找到 另一个已包括在 Apache 中,名为 mod_actions.c。这些模块极为相似, 只是在用法上有少许差别。两个都测试过,能和 PHP 顺利合作。

查看 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 分析。此外,如果你在 srm.conf 档的 DirectoryIndex 设定行加上 index.phtml,最上层的网页便会自动由 php 分析,如果你的 index 档名为 index.phtml。

Netscape HTTPD

你可籍 Netscape Server CGI Redirection 模块来指定自动把对某些延伸档名的文档的要求改向给 PHP。这模块可在 PHP 网页的 File Archieves 中找到。套件中的 README 明确地解释了如何设定它来用于 PHP。

NCSA HTTPD

目前,NCSA 并不支持模块,所以,要使用 cgi 改向的话,你要修改伺服器的原始码。 一个对 NCSA 1.5 做这工作的嵌补在在 PHP 文档存库中找到。

21.6 在指令行执行 PHP

如果你建立了 CGI 版本的 PHP,你只需在指令行输入 php.cgi filename,而filename 是你想分析的文档。你可建立独立的 PHP 命令稿,只需把命令稿 (script) 的第一行写为类似︰

    #!/usr/local/bin/php.cgi -q
“-q”阻止印出 HTTP 标头。喜欢的话,你可不用这选择。

21.7 PHPGem 套件

PHPGem 是一个 PHP 命令稿,用以加速编写使用表格的 PHP 命令稿。它可用于不同的 SQL 伺服器,如 PostgreSQL、MySQL、mSQL、ODBC 和 Adabas。 你输入表格栏位的描述和参数(栏位名称、栏位的 on/off searching (?) 等等), PHPGem 输出另一个使用哪些表格的 PHP 命令稿(检视/加/修改/删除/重覆内容和搜索)。 PHPGem 可使用多层巢状表格 (multi-level nested tables, ??)。PHPGem 容许你指定每个表格每个栏位每人旳存取控制。PHPGem 也支持影像。

PHPGem 在 http://sptl.org/phpgem 找到。


Next Previous Contents