|
PHP学习宝典-第二章
_next[1] | [2] | [3] | [4] | [5] | [6] | [7] | [8] | [9] 第二章 - 伺服端Web的Scripting语言 本章重点 本章重点在讨论服务器端Scripting语言本身,另外也谈及它与静态HTML和一般用户端技术之间的关系。在本章结束时,读者就能够清楚知道PHP能做什么、不能做什么、还能够对它与用户端原始如何进行交流有大致上的了解。 静态HTML 最基本的Web网页形式是完全以HTML编写纯静态、纯文字的页面。图2-1中的简单HTML页面就是一个例子。 伺服端Web的Scripting语言 本章重点 本章重点在讨论服务器端Scripting语言本身,另外也谈及它与静态HTML和一般用户端技术之间的关系。在本章结束时,读者就能够清楚知道PHP能做什么、不能做什么、还能够对它与用户端原始如何进行交流有大致上的了解。 静态HTML 最基本的Web网页形式是完全以HTML编写纯静态、纯文字的页面。图2-1中的简单HTML页面就是一个例子。 图2-1 静态HTML网页规范 以下为图2-1的原始码: 如图2-2所示,当用户端电脑透过Web或Intrantet从服务器做出对某个页面的HTTP请求时,服务器只需传递档案中找不到的纯文字。 当该资料送回用户端电脑,浏览器按照自己对原始码内容的精确解析、使用者的偏好选项、显示器大小以及其它因素做出最佳处理并呈现出来。服务器上HTML档案的内容与用户端电脑上页面的原始码完全相同。 你这样非常普通的静态HTML具有以下几种优点: ◆ 任何浏览器都有能力显示它。 ◆大多数的设备都有有能力显示它。 ◆它对每个请求都能迅速执行,并且只用最少的资源。 ◆ HTML容易学习或自动产生。 ◆ 对单独页面能够快速进行小更动。 ◆ 当然,静态HTML也有不利的一面: ◆ 难以控制设计和版面配置。 ◆ 无法扩充到大量的页面。 ◆ 互动性不够好。 ◆ 不易包含关于页面有意义metadata。 ◆ 不容易应付内容或个人化资讯的迅速改变。 ◆ 不很具有吸引力。
针对这些限制,日前已经发展了很多种其它技术,其中包括用户端的JavaScript、Cascading Style Sheet(CSS)和Java applets,还包括伺服端资料库连接的伺服端scripting语言。正在发展中的技术尚包括XML和XSL,这两种技术都有是其它各种规格(XHTML、XSLT、XPath、ICE等)的一部分。 如果花些时间去了解这些技术有哪能些功能,以及是否能够加到自己的Web网站中,一定会减少往后让你头痛的机会。对于任何在手上的Web网站任务,第一步要先问自己的基本问题是:该运算(computation)在哪端执行,用户端还是伺服端? 「动态(dynamic)」的涵意在「静态」和「动态」Web网页之间有一个基本且重复差异,但「动态」几乎可以表示除普通HTML之外的所有一切。它既用来描述用户端功能,也用来描述伺服端功能。在用户端,「动态」可看成是多媒体展示、卷动的标题行、自动更新的页面或者时隐时现的元素……等。在伺服端,这个术语一般是用来指称正在空中传送并交互组合的内容。 用户端技术 对于普通HTML,最常见的内容新增是发生在用户端。包括以下方面:CSS和Dynamic HTML之类的格式扩充能、用户端scripting语言、Java applets和Flash。这些技术的支持方式是(大多数是有支持)内建在Web浏览中。表2-1列出它们的功能,其中有部分重叠。 表2-1 用户端HTML的扩充 图2-3所列示的页面范例与图2-1乃基于相同的内容。 正如从原始码中以看到的,这个例子新增了一些样式表、用户端scripting和一些比较复杂的HTML码。 很不幸地,用户端技术的最佳卖点也是最坏的特质:它们完全依赖于浏览器。每种浏览器的功能差别很大,即使同一个牌子出品的不同版本之间差别也很大。处每个人还可以选择以不同的方式配置自己的浏览器,例如,某些人们会因为安全的顾虑而禁止使用JavaScript,这样得他们不可能浏览那些过度使用 JavaScript进行导览处理的网站。(如果我们在先前范例所示的功能) 而且,许多使用者由于费用或技术不足的原因,在浏览器的升级工作方面效果级差。Web开发人员应该对基于设备的浏览、普通性和全球性用户等有所了解。无一例外,以大众市场为导向而设计的网站都试图取得最广泛的用户,例如,Yahoo!和Amazon在采纳了这些标准后,坚持不使用样式表和 JavaScript已经有三年多了。在W3C的压力下,许多网站仍固执地坚持使用FONT标记和BGCOLOR属性,他们的客户可能是那些在13时显示器的老旧Macintosh机器上使用AOL3.0的用户。更讽刺的是,即使Web在经历了五年快速发展之后,开发人员可以对客户提出绝对保证的仍只是让他们看到以纯文字为主的普通HTML而已。(或者甚至是HTML的子集合而且已经成功轻松经历过时间的考验) 最后,用户端技术不能做任何需要连接到后端服务器的工作。JavaScript不能根据储存在资料库中的使用者偏好选项即时产生自定义的下拉清单,当列表中需要做修改时,Web开发人员必须到该页面进行手动的修改(伺服端JavaScript,但目前用得不太多)对于此问题,伺服端JavaScript语言是可以填补此一鸿沟的救星。 总之,处理版面配置或浏览器事件的一切动作都发生在用户端上。一般来说,看上去很酷的效果或取决于鼠标移动的事情都是在用户端上。能够看到某事件显现的速度越快,它就越可能是由用户端处理的,因为速度快就代表了不需要从服务器进行下载。 注意: applet在早期被认为是无意义的小东西,因为它们最初只是用于实现一些简单的动书,如看上去像透明胶做的图示标志,会滚动的标题列,跳动的键结等。幸好,applet已经有了改变,也可用于一些很具人文意义的使用目的,诸如纵横字谜、汉诺塔仿真、试穿戴套装和饰物和虚拟方式等。
图2-4是服务器scripting资料流程的示意图。 用户端scripting语言非常有魅力,是非曲直Web开发中最抢眼的部分。伺服端程序设计则正好相反,它对用户来说是看不见而隐藏在后面的。伺服端 scripting的程序设计人员总是在后端的Web服务器的资料之间努力摸索,而在前端妹夫有艺术细胞的同仁们则可以在大众面前书情展示自己的作品。 伺服端Web的scripting语言主要是将W eb网站连接到后端服务器,诸如资料库,这就允许进行双向的交流沟通:
◆ 服务器到用户端:Web网页可从后端服务器输出组合而成。 ◆ 用户端到服务器:使用户端所输入的资讯得以发生作用。 常见的用户端到服务器交流沟通的例子是,在服务器上动态组合的线上表单和一些下拉式清单。(通常它需要你按下按钮)。 伺服端scripting语言产品有两个主要部分:scripting语言和scripting引擎(可能会内置在Web服务器中,也可能不会内置)。引擎部分都有是由同一个公司或团队开发的,只能互相配合使用(PHP3和ColdFusion就是这样的两个例子)。然而,这一规则也有例外,举例来说, Java Server Pages就是以标准程序语言编写的,而不是用于专门目的的scripting语言;有些配合厂商已经开发了几个可兼容互换的引擎(例如Allaire JRun 、Apache JServ)。 从理论上来说,Active Server Pagesb允许使用绝大多数与所有scripting语言以及几种相配的ActiveX的scripting引擎中的一种(然而在实务作业中,除 NT/IIS/VBScript/JScirpt的组合之外,其它组合的问题都非常多),由于PHP4的scriptingz引擎(Zend)目前在理论上是与PHP程序设计语言分离的,所以PHP4现在也算是一种分离式的独立scripting技术了。 图2.5列出了一个简单的伺服端scripting语言的范例,根据伺服端原始码和用户端原始码,从资料库即时产生一个页面。我们含括了资料库呼叫(在本书的Part II之前,目前先不进行细部讲解),并略掉了一些含括的档案,因为这个例子的目的是显示PHP的最终成品,而不是成为正式作业可执行的原始码使用。 以下是服务器上的原始码: 这是同一个页面在到达用户端时的原始码呈现形式: 上面列出的这个页面并不比本章开头所列的普通 HTML 版本更能让人深刻印象。然而,传入不同的变数将导致自动产生任意数量的特定页面,在前述的例子中,其页面是依条件选列出书籍,而不是以作者的姓氏来选,因此结果是没有任何再进一步的工作。如果我们在资料库中新增关于另一个公司的新书,这些例表将自动更新,以反映新的资料。 从这两个不同的原始清单中可以看出,不能从用户端检视伺服端 scripting 。所有重头戏都发生在原始码传送给用户端之前。从 Web 服务器形成之后,原始码在另一端以普通 HTML 的形式出现。这也意味着不能区分出使用了哪种伺服端 scripting 语言,除非在标头( header )或 URL 中有列示。这些 scripting 是以 PHP 和 MySQL 资料库编写的,在本书第二部分可以学习关于这些技术的所有内容。 许多工作和完成都可选用户端的方式或伺服端的方式。例如,发送 e-mail 的用户端方式,是在使用者按一下 mailto 钮链结时以用户端邮件应用程序打开一个收件人地址是空白的电子邮件视窗;但使用伺服端方法是则让用户填写表单,其中的内容格式化为电子邮件 开式,并透过一个 SMTP 服务器发送。还可以在浏览器检测、表单校验、下拉清单和算术运作等工作的用户端方法和伺服端方法之间来选择。有些时候,在它们的功能上有些微而重要的差别(在伺服端,下拉清单可动态生成,而用户端则不行),不过并不 全然都昭此 。 怎么选择呢?请先从了解你的使用者着手。伺服端方式一般在执行时间上会慢一些,因为要进行额外的传输,但对于拜访者的浏览器能力并不做任何假设,而且开发人员进行维护的时间会相对比较少。这使得它们很适合一般大众市场和教育型的网站。如果能够绝对肯定自己的拜访者都有更新过的浏览器以及较高的存取量,就能够自由进行 scripting 语言和制图。最后要记住,可以使用 PHP 生成静态 HTML 和 JavaScript ,这样就能兼顾两个大方向,后面将对比进行更深入的讲解。 伺服端 scripting 的擅长之处 用户端和服务器各有优点,伺服端 scripting 在呈现上比较缺乏视觉上的吸引力。大多数 Web 用户即使不是每小时,至少是每天都在和伺服端 scripting 成品打交道 貌 岸然。 而像「即使 3D 枪战影片」这一类事情是服务器绝对没法子帮上忙完成的。专案需要的 回应越 即时、图形越密集,则越不适合采用 PHP 来实现它。此刻,对于这些目的来说, Web 是太慢了(尽管宽频领域的精英们正在努力于改变此 一 现状)。 另一方面, PHP 之类的伺服端 scripting 能够在 Web 上发挥得很好的方面是: ◆ 内容网站(包括制作和显示) ◆ 属于社群特性的站(像论坛、公布栏……等) ◆ e-mail( Webmail 、邮件转发、由 Web 应用程序发信 ) ◆ 客户支援和技术支援系统 ◆ 广告网路 ◆ Web 发送及投递业务的应用程序 ◆ 目录和成员名单 ◆ 调查、民意测验和测试 ◆ 线上填写和表单提交 ◆ 个人化的技术 ◆ 群组软体 ◆ 目录、小册子和资讯网站 ◆ 基本上包括其它任何需要把后端服务器(资料库、邮件、 LDAP 等)连接到 Web 服务器的应用程序。 PHP 能够处理以上所列出的基本任务。 经过前述内容,现在读者应该对用户端和伺服 端技术 之间的差异点有所体会,接着该动手实践了吧。接下来的章节会谈到如何取得、安装以及设定 PHP (或其它人来为你做这些事情)。 由于程序设计语言最近的快速发展,程序设计和 scripting 语言之间差别已渐变得模糊。例如, PHP 本身就使用了和其它程序设计语言中一样的控制结构。然而,完全直译 式执行 的 HTML 嵌入式语言,诸如 ASP ,仍是被认为是位于 scripting 语言这一侧,而单独编译的 二进位码则是 程序设计的比较鲜明的标 标 。但由于 PHP4 现在是动态编译的(编译好的二进位码被保存起来并重复使用,直到原始 码有了 变更),它也正式成为一种「真正的」程序语言,这种改变可以说明 PHP4 在速度上的变化,它已经和 Perl 被归纳为同一类。 摘要 要知道 PHP (或任何其它伺服端 scripting 语言技术)可以做些什么,并掌握用户端和服务器之间的工作划分是相当重要的课题。在本章中,我们使用例子示范了普通的静态 HTML 、由用户端来产生效果(如 Java Script 和 CCS )的 HTML ,还介绍了从伺服端和用户端上看到的 PHP 所产生的 Web 网页。 用户端 scripting 语言在视觉上较具有吸引力,并且可以迅速回应使用者的输入,但任何超出最基本 HTKL 的内容就会取决于浏览器的不同而受到影响。静态的 用户有端 scripting 还需要开发人员用更多的时间进行维护和更新,因为页面不能根据不断变化的资料存取而自动生成。伺服端程序设计和 scripting 语言,诸如 PHP ,能够把资料库和其它服务器连接到 Web 网页中。 PHP4 在架构上与其它一些伺服 端工具 不同,甚至和 PHP3 也不同。它是可动态编译的,这使得它在执行时更迅速。 PHP4 甚至还把 scripting 引擎( Zend )从 scripting 语言中分离出来了。 |