作为构建动态网页的一种语言,提供了一种简化的来构造复杂而功能强大的 与 Web 相关的程序。Erik用一个原始的、现实世界的网站示例逐步说明了 PHP 的基本原理。本系列文章分为两部分,第 1 部分介绍了 PHP的基本概念,并分析了一个应用程序示例,Webzine。Webzine 包括内容提供者可输入文章文本的一个编辑页,以及用来将该内容展示给全世界的一个前端。
如果您是初次接触PHP,您可能会惊喜地发现在实践中它是多么易于使用。本文旨在使您对 PHP的方式留下一个好的印象; 随后您就可以确定它是否适合您。
1.有关PHP的经验
本系列文章分为两部分,第1部分说明这个应用程序是如何工作的(不包含在您的系统上安装PHP)。您将有机会试用主索引页,并窥视一下部分组件在幕后是如何工作的。如果这是您唯一的动力,则请一定要查看下一篇,在那一部分将深入探讨有关主索引页的其他内容。(第 2部分还将用几个程序示例讨论编辑组件。您可以下载源并将您自己的想法付诸实施。)
如果您了解 并熟悉任何一种类似 C 语言的语言(尤其是Perl),则您理解下面的示例应该不成问题。 即使您没有太多使用过类似C的语言,您仍然能够理解这些示例。但您确实需要了解 HTML的基本知识。
这个 PHP 应用程序样例是一个生成阅读器的Webzine,它带有一个简单的发送模块(代码不超过3K)。该模块显示一个主题列表。
在每个主题标题下是一系列按逆时间顺序排列的文章摘要。用户通过单击标题就可以看到整篇文章。还有一个稍复杂一点的编辑模块,它允许任何读者成为作者并提交他/她自己的内容。作者必须选择一个类别,并输入文章的标题、简单的摘要和故事的全文。如果愿意,您可以输入一个图像文件的URL 并单击“预览”按钮来检验是否一切已经就绪。作者的输入要经过验证--甚至要经过安全检查,这种安全检查将把除少数安全的标记以外的所有标记转换为非格式,从而防止危险或恶意的HTML 编码被执行。例如,字符串 将变为。这种转换实际上使标记无效。
2.一项专用的 PHP 技术
在研究Webzine的实际代码之前,让我们首先考虑一个简单的示例,这个示例很好地说明了PHP 的特征。PHP的语法允许您任意将HTML语句与PHP语句混合在一起。这意味着HTML语句可以出现在循环、if/else语句、函数等上下文中。我在Webzine程序中利用了这一特性,但下面的代码样例用一种更简单的方法使它变得更简洁。
假定我们有两个数组,$names和$days,它们包含一年中各个月的信息,于是$days[0]= 31和$names[0]="January",$days[1]等于28和$names[1]等于"February",等等。下面这项技术用来创建包含天数和月名的一个表:
清单 1:创建包含天数和月名的一个表
Name | Days |
---|
for($i=0; $i<12; $i++) { // 循环开始。
?>
|
|
} // 循环结束。
?>
为明确起见,上面的PHP语句用红色显示;HTML语句用黑色显示。请注意,专用标记 从HTML切换到 PHP,而 ?> 切换回 HTML。
要注意的一点是:您可以切换到 PHP,开始一个for循环(或 if/else,或switch,或其他语句),然后退回到HTML,现在您正在输入的 HTML命令将成为循环结构的一部分,所以它们随循环一起重复。您可以根据需要(例如,如我在上面所做的那样,发出echo 语句以将变量输出到网页中)进入或退出 PHP 模式。然后,当您退回PHP 并输入一个结束花括号时,正如您所料,循环结束。
实际表的外观如下所示:
Name Days
January 31
February 28
March 31
April 30
May 31
June 30
July 31
August 31
September 30
October 31
November 30
December 31
如果这种行为令人迷惑,则可以这样来考虑它:PHP解释器将用echo 语句替换HTML模式中的每一行,以将该行送入输出流中。如果 echo语句出现在 if/else 结构中,则它将是有条件执行的。如果它出现在一个循环结构中(如上所示),则它将重复执行。
3.应用程序概述
Webzine驱动程序,index.php3,有三个主要的组件:主题菜单、故事列表和完整的故事表示。如果读者选定的主题没有任何故事,也会显示一些缺省的文本。编辑页更复杂。它包含一个表单、一个反馈消息和一个确认消息,表单用来接受用户的输入,反馈消息来通知作者需要纠正的问题,确认消息用来向作者显示他们所提交的内容。它还知道如何验证所提交的故事,进行必要的更改以确保内容中不包含任何未经认可的HTML,将故事保存在一个故事文件中,并更新这个故事相应的菜单文件。
该应用程序有三种数据文件:Category.txt包含一个简单的主题列表,故事就是在这里组织的。每个主题与一个主题菜单文件相关联。第一个主题必须是"Main",并与主题菜单文件 Main.txt 相关联。如果第二个主题是 "TheArts",则它与名为 TheArts.txt的主题菜单文件相关联。在菜单文件中,每个故事的信息单独占一行:一个故事编号、一个标题、一个类别、一个简单的摘要,以及一个可选的图像URL。最后,故事文件包含一个故事的实际正文。文件 s1.txt将包含第一个提交的故事,s2.txt包含第二个提交的故事,依此类推。如果您知道一个故事的编号(比如说 26号),则它的文件名很容易确定 (s26.txt)。
4.试用 Webzine!
在您仔细研究这个应用程序之前,请首先试用它。试用 Webzine驱动程序。它的左侧是一个主题列表,右侧是一个故事列表。您可以选择一个主题,或者选择"Main"来查看所有故事。首先出现的是最近的故事列表,第一组故事中如果有图像,同时也会显示这些图像。当您单击一个故事的标题时,就是出现一个包含该故事的完整正文的一个页面。
试用编辑页(您也可以从Webzine 中试用它)。它提供一个表单,允许您提交一个故事。向 Webzine提交内容时,请注重大众的观念和好的品味。如果您录入程序不喜欢的内容,将显示一条错误消息。一旦故事被接受,您就可以返回Webzine 来查看它在读者面前是什么样子。
现在您已经试用了应用程序,请继续阅读后面的部分以了解它的创建过程。
4.Webzine 驱动程序
传递参数
index.php3 页允许传递参数,如下所示: index.php3?topic=TradeShow&story=33
对于上面的调用,下面的变量赋值将在调用index.php3之前自动进行:
$topic = "TradeShow";
$story = 33;
如果您忽略这些参数,则$topic和$story变量将不存在。您可以显式地对它们进行检测,或在您引用它们时让PHP返回缺省的空值。
注:如果这个特性在您的系统上不起作用,请查看 php.ini文件,确保 register_globals = On。
网页标题
让我们首先查看许多PHP应用程序中的一项常用技术;将某些种类的信息存入程序开头的变量赋值语句中。这样易于以后的维护和更新。
清单 2:变量赋值
同样,请注意 PHP 的边界标记: 使您从 HTML模式进入 PHP 模式,而 ?> 切换回 HTML 模式。您可以来回切换任意次。某些操作在 HTML模式下较容易实现,而另外一些操作在PHP模式下较容易实现。您所做的全部事情就是在程序开头定义两个变量,然后进入HTML 模式。当需要使用某个变量时,就退回 PHP 模式,并发出一条echo语句将该变量的值直接写入网页正文中。
$title = "PHP Demo Webzine";
$slogan = "Illustrating the coolness of PHP since September 2000";
?>
类别菜单
Category.txt文件只是主题名的一个列表,每个主题名单独占一行。例如,如果该文件只包含三项:
Main
Politics
Technology
您将获得三个主题菜单文件:Main.txt、Politics.txt和Technology.txt。一旦选定 "Main"主题,驱动程序就会出现,如下所示:
Main
Politics
Technology
HTML 源代码如下所示:
下面是从将 Category.txt 编译为上面所示的 HTML 代码片断的 PHP
源代码中摘录出来的相关代码片断。首先,将文件 Category.txt
读入一个数组 $cats:
$cats = file("category.txt");
$elems = count($cats);
?>
file 函数只是将文件复制到一个数组中。所以$cats[0] 等于 "Main",$cats[1] 等于"Politics" ,$cats[2] 等于"Technology"。file 函数使导入一个小 ASCII文本文件变得非常容易,但不要将它用于很大的文件。count函数统计数组中的元素个数,所以在本例中 $elems 应该等于3。下面说明如何利用那个数组创建上面的HTML表。
阅读(350) | 评论(0) | 转发(0) |