PHP3 简介
Web 开发领域最新兴起的技术之一是名为 PHP 的语言。据其在 https://php.ac.cn/ 的倡导者称,沃尔沃、红帽、美国小姐 1999、美国第一银行、NASA JPL 和其他著名组织都在使用它。其最流行的应用之一是连接数据库,但它也可以与 LDAP、IMAP 和 SNMP 服务对话,动态生成 GIF,以及执行其他技巧。
PHP3 是一种服务器端包含脚本语言,它一直被比作微软的 ASP(Active Server Pages),但对我而言,有两个关键的区别:它是开源的,并且可以在 Linux 上运行。实际上,它是在 GNU 许可或 PHP 许可下提供的,这允许从它开发商业闭源产品。它可以在许多 UNIX 平台上运行。
什么是服务器端包含?可以将其视为另一种嵌入式语言,如 JavaScript,但它在服务器上被转换为 HTML(或图像、JavaScript 或其他可能性)。用户的浏览器看不到 PHP 代码,只能看到执行结果。这保护了开发人员的工作,增强了安全性,并绕过了诸如 JavaScript 实现冲突之类的问题。
例如,以下代码
<HTML><BODY><?PHP echo "Hello, Net" ?></BODY></HTML>
在启用 PHP 的服务器上的 PHP 页面中,将在用户的浏览器中显示为 Hello, Net。
PHP 可以为您做什么?它大大降低了使用 cgi-bin 变量和连接数据库的复杂性,并允许在网页中使用易于学习的语言进行编程。它可以做更多的事情(在线参考列出了 53 种类型的功能),但我将重点关注数据库连接。
MySQL 似乎是最流行的与之配合使用的数据库,因此我将在我的示例中使用它。PHP 也可以连接到 Oracle、Sybase、PostgreSQL、Informix 和其他数据库。重要的是要注意,PHP 不是数据库独立的,这与 Perl 使用的 DBI 系统不同。您必须使用为目标数据库量身定制的 PHP 函数。这使 PHP 可以访问仅在特定数据库平台中可用的功能,但可能会降低启用数据库的项目的可移植性。
在以下讨论中,我将假定读者具备 SQL、HTML 和 C 知识。
我已经展示了上面 PHP 中的“Hello, World”。请注意,整个 PHP 代码都嵌入在 HTML 中的单个标签中。约定是将扩展名 .php3 分配给应由 PHP 预处理的页面,尽管这是可配置的。该页面包含 HTML(以及服务器和浏览器支持的任何其他内容,例如 JavaScript),其中包含一个或多个 <?php ...php code... ?> 代码块。正如我上面提到的,PHP 会被评估,其输出会发送到浏览器,通常是 HTML。PHP 还可以发送任何文本语言,甚至动态生成图像。
PHP 代码块可以包含在 HTML 中的任何位置——甚至在引号或标签内。例如,可以使用 PHP 生成指向另一个页面的链接。以下示例
<HTML><BODY> ... For more information, visit <A HREF= "<?php echo "moreinfo.html" ?>"> wacky link </A> </BODY> </HTML>
可以工作,尽管意义不大。PHP 的价值在于它是一种强大的编程语言。它允许通过代码生成链接之类的东西。人们可以用它构建整个交互式网站。
PHP 非常像基本的 C,有点像 Perl,并且有一些自己独特的功能。以下是一些关键事实
变量以 $ 开头(只有 $,没有 @ 或任何其他符号)。
原始类型包括整数、浮点数、字符串、数组、关联数组和对象。
类型通常是自动设置的,而不是在代码中设置的,因此无需声明变量。可以将它们声明为 static,这使得它们在同一页面上的 PHP 代码块之间保持持久。
//、/*..*/ 和 # 都用于注释——有点像 C++、Perl 和 shell 脚本的组合。
语句以分号结尾。
函数可以在代码块内声明。它们的声明和调用类似于 C。
提交到 PHP 脚本的表单会传递其变量(这非常酷)。它们可以通过名称访问,并且也包含在一个数组中,当您的调用表单是一个可能具有不可预测变量名称的 PHP 程序时,这非常方便。
控制结构和运算符的集合与 C 非常相似,尽管有一些扩展。
对对象类型的支持有限。
列表 1 是 PHP 代码的两个示例,展示了它的一些功能。第一个页面接受两个数字来添加名字和姓氏。表单变量自动传递到下一个页面以供使用,这是 PHP 最简洁的功能之一。这里没有检查它们的类型——它们实际上是数字——以便给出错误。它确实展示了 PHP 如何用于向用户发送和接收信息。
列表 2 是一个动态生成 CGI 变量的示例,接收页面(列表 3)处理任何传入的生成变量。如果您在启用 PHP 的服务器中运行此代码,您将在浏览器的位置行中看到以 cgi-call 形式传递的变量。列表 3 所做的只是回显变量的名称,但它演示了一种技术,该技术可以使网站动态生成列表并允许用户进行选择——就像购物车一样。
现在让我们连接到 MySQL 数据库。以下代码将以 root 身份连接到本地主机上名为“stores”的数据库,密码为“tiger”。它针对 parts 表执行查询,计算查询中的行数以检查实际数据,如果存在,则结果将显示为带有复选框的 HTML 表格以选择项目。列表 4 是 PHP 代码,前面是表的结构。请注意,知道行数对于确定是否完全显示查询(如果有任何信息)以及向下计数直到没有数据剩余都非常方便。数据的每一行都是 HTML 表格中的一行,字段按数字遍历。包含查询行的数组可以通过数字或字段名称寻址,因此您也可以执行
$partno=$row["partno"]
当表格或查询中的字段位置可能比名称更频繁地更改时,这在开发期间可能是有利的。
HTML 的下一页(在 FORM 命令中调用)将接收选中的选项作为 CGI 变量,即使它们的名称未知,也可以使用上面显示的技术检索它们。然后,它会将选中的项目插入到另一个表中。请参阅列表 5。
有关安装 PHP 的最新信息,请访问 https://php.ac.cn/ 或在发行版本身中查找。我已经使用他们提供的软件包为 FreeBSD、Linux 和 Win32 安装了它。我只为 Apache 安装了它,尽管它应该与其他 Web 服务器一起工作。它以源代码形式提供,适用于 Win32 以外的平台。Apache 的安装需要重新编译 Apache 以将其作为模块添加进去,但如果这不是一个选项,则可以将其安装为二进制文件,并且脚本可以作为 cgi-bin 脚本运行。
我发现 PHP3 是一种非常令人愉快且用途广泛的 Web 应用程序语言。在撰写本文时,下一个版本——主要标榜性能改进——正在进行 beta 测试。(PHP 4.0 包括 ZEND 引擎;有关详细信息,请参阅他们的网站。)
John Holland 作为贝尔大西洋公司的顾问,负责编写内部网应用程序。他和妻子及孩子住在华盛顿特区郊外。可以通过 jholland@jbhsoft.linuxbox.com 联系到他。