前言

今天的Web用户期待更吸引人的页面——它们会频繁更新,并且提供个性化的体验。在他们看来,Web站点更像是社区,他们将一遍又一遍地回访。同时,Web站点管理员希望站点更容易更新和维护,他们理解到这是能够不断满足访问者期望的唯一方式。由于如此种种原因,PHP和MySQL变成了创建动态的、数据库驱动的Web站点的事实标准。

本书可以说是凝聚了我多年Web开发经验和多部Web开发技术图书写作经验的颠峰之作。本书重点在于以最高效的方式介绍最重要的知识。它将介绍如何开始开发动态Web站点,并给出了大量示例代码来帮助读者起步。你只需要满怀热忱地来学习就行了。

好吧,我们这就开始……

什么是动态Web站点

动态Web站点非常灵活、强大,将其描述为应用程序(application)而不仅仅是站点会更准确。动态Web站点的特征包括:

  • 能够对不同的参数做出响应(例如,一天中的某个时间,或者访问者的Web浏览器版本);

  • 具有“记忆”,允许用户执行注册、登录、电子商务以及类似的过程;

  • 通常包含HTML表单,使得人们可以执行查找、提供反馈等;

  • 通常具有允许管理员管理站点内容的界面;

  • 与静态创建的站点相比,更易于维护、升级和构建。

有许多技术可用于创建动态Web站点。最常用的技术是ASP.NET、JSP(Java ServerPages)、ColdFusion、Ruby on Rails和PHP。动态Web站点不一定依赖数据库,但是,越来越多的动态Web站点正在这样做,何况还有MySQL这样几乎可以免费使用的数据库。

什么是PHP

PHP最初代表“个人主页”(Personal Home Page),由Rasmus Lerdorf于1994年创建,用于跟踪访问者对其在线履历的访问。随着实用性和功能的不断提高(并且也开始用于更专业的环境中),它变成了“PHP:Hypertext Preprocessor(PHP:超文本预处理器)”。

根据www.php.net(参见图0-1)上PHP官方站点的说法,PHP是“一种广泛使用的通用脚本语言,特别适用于Web开发,并且可以嵌入在HTML中”。这是一个复杂但具有描述性的定义,其含义将在后面解释。

称PHP“可以嵌入在HTML中”,意味着在标准的HTML页面中根据需要插入一些PHP代码,就可以得到动态效果。因此PHP很适合网页设计和制作者使用。

此外,与编译语言相比,PHP是一种脚本语言:设计PHP的目的是用于编写Web脚本,而不是编写独立的应用程序(当然,现在多费点劲也可以用PHP创建应用程序)。PHP脚本只在某个事件(例如,用户提交一个表单或者输入一个URL地址)发生之后才运行。

图0-1 PHP主页

我应该在这个定义中添加一些内容,指出PHP是一种服务器端、跨平台的技术,这两个描述都是重要的。服务器端是指PHP做的所有事情都发生在服务器上。这需要Web服务器,像Apache或微软公司的IIS(Internet Information Services,Internet信息服务),并且必须通过URL(以http://开始的网址)访问所有PHP脚本。跨平台的意思是,PHP可以运行在大多数操作系统上,包括Windows、UNIX(及其许多变体)和Macintosh。更重要的是,对于在一台服务器上编写的PHP脚本,通常不用修改或者只做很少的修改即可工作在另一台服务器上。

PHP6发生了什么?

当我撰写本书的第3版时,PHP的下一个主要版本PHP 6已经开发了将近一半儿了。考虑到PHP 6可能会在那一版出版后不久发布,我就在当中加入了一些PHP 6 beta版的内容。但不幸的是,PHP 6夭折了。

PHP 6最主要的新特性是将Unicode引入PHP引擎,这意味着PHP 6将可以处理世界上所有的语言字符了。这将使这个已经非常受欢迎的编程语言锦上添花。不幸的是,实现对Unicode的支持十分复杂且难度很大,语言的开发者搁置了PHP 6的开发。然而不是所有的都取消了:PHP6计划引入的一些新特性,比如命名空间(面向对象编程的概念),就已添加到PHP 5.3版中。

在撰写这一版时,何时实现Unicode支持尚不明朗,PHP 6的正式发布日期还未可知。我预感未来一段时间内PHP将会沿着版本5的主干渐进发展。

在编写本书的时候,PHP的最新是5.3.6版本,建议读者使用PHP5.0以上的版本。本书中要用到的一些函数和特性需要运行在PHP 5.2及以上版本。当用到新版本中引入的功能时,我会为那些仍使用较低版本的读者提供一些替代解决方案。

如果你仍然还使用着PHP4,强烈建议升级到更高版本。如果你没有这个计划,那么请购买本书的第2版。

更多关于PHP的信息,PHP核心背后的思想,可以随时在PHP.net或者Zend(www.zend.com)上找到。

为什么使用PHP

简单地讲,在开发动态Web站点时,与其他可选技术相比,PHP更好、更快并且更易于学习。PHP有优秀的性能、与几乎所有数据库的紧密集成、稳定性、可移植性,以及由于其可扩展性而得到的几乎无限的特性集。所有这些都是免费的(PHP是开源技术),并且非常易于学习。在我接触的语言中,PHP是最佳地结合了易用性和高级能力的语言之一,初级程序员使用它很容易上手,更高级的程序员可以用它做他们需要的一切事情。

最后,一个事实可以证明这一点:PHP自从推出以来,其用户数量呈指数级增长,76%的网站都采用PHP作为其服务端技术(参见图0-2)。在所有受欢迎的编程语言中,PHP排在第5位(参见图0-3)。

图0-2 Web Technology Surveys 网站提供的服务器端技术调查表(www.w3techs.com/technologies/overview/programming_language/all

图0-3 Tiobe Index(http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)结合各种因素给出的流行的编程语言排名

当然,由于我是PHP图书(实际上市面上有很多本这样的图书)的作者,你可能想当然地认为我的观点有失公平。尽管我使用JSP、RoR(Ruby on Rails)和ASP.NET不像PHP那样广泛,但是也使用它们开发站点。它们都有自己的优缺点,但是我总是会返回到PHP这种技术上来。你可能听说它的性能和扩展性不如其他技术,但是Yahoo!、维基百科、Facebook都使用PHP,比这几个网站的访问量多的网站可不多啊。

你也可能想知道PHP的安全性如何。但是安全性不在语言本身,而在于使用语言的方式。当然,本书将全面讨论所有重要的安全性问题的最新内容。

PHP如何工作

如前所述,PHP是一种服务器端语言。这意味着用PHP编写的代码将驻留在称为服务器的主机上。服务器发送Web页面给发出请求的访问者(你、客户端和Web浏览器)。

当访问者访问用PHP编写的Web站点时,服务器读取PHP代码,然后依据其脚本指令处理它。在图0-4所示的示例中,PHP代码告诉服务器发送合适的数据(HTML代码)给Web浏览器,Web浏览器再把接收到的代码处理成标准HTML页面。

图0-4 当用户请求Web页面时,PHP如何在客户/服务器模型中发挥作用

这不同于静态HTML站点。在静态HTML站点中,当发出请求时,服务器只是把HTML数据发送到Web浏览器,而不会由服务器端进行解释(参见图0-5)。由于不需要服务器端的动作,所以可以在Web浏览器中运行HTML页面,而根本不需要使用服务器。

图0-5 当对静态HTML页面发出请求时客户/服务器的处理过程

对于最终用户和Web浏览器来说,home.htmlhome.php两者在外观上并没有明显的区别,但是,其页面内容的创建方式却有着天壤之别。

什么是MySQL

MySQL(www.mysql.com,参见图0-6)是世界上最流行的开源数据库。事实上,今天MySQL成为了那些昂贵的重量级数据库(如Oracle和微软公司的SQL Server)有力的竞争产品。像PHP一样,MySQL提供了优秀的性能、可移植性和可靠性,易于学习,并且几乎是免费的。

图0-6 MySQL数据库应用程序的主页

发音指南

虽然只是小节,但我仍要预先说明:MySQL应该读作“My Ess Que Ell”,就像SQL应该读作“Ess Que Ell”一样。许多人最初都会对此产生疑问,虽然这并不是什么大问题,但是,学会正确地读缩写词总是好事。

MySQL是一种关系数据库管理系统(DBMS,Database Management System)。简单地讲,数据库是一些相关数据的集合,这些数据可以是文本、数字或二进制文件,它们由DBMS进行存储和组织。

数据库有多种类型,从简单的平面文件到关系数据库和面向对象数据库。关系数据库的特征是使用多张表存储信息。虽然关系数据库在设计和编程阶段需要做更多工作,但它们提高了可靠性和数据完整性,抵消不足绰绰有余。此外,关系数据库的查找能力更强,并且允许并发操作。

通过把数据库纳入Web应用程序中, PHP生成的数据可以从MySQL提取(参见图0-7)。这进一步把站点的内容从静态(硬编码)转为灵活,灵活性对动态Web站点可是至关重要的。

图0-7 本书中大多数动态Web应用程序的工作方式:同时使用PHP和MySQL

与PHP一样,MySQL也是一种开源应用程序,这意味着它可以免费使用,甚至可以修改(源代码可下载得到)。有些情况下需要付费获得MySQL许可证,特别是在销售或打包使用MySQL产品来赢利时则更应如此。查看MySQL的许可政策,可以获取这方面的详细信息。

MySQL软件包含多个部分,包括MySQL服务器(mysqld,它运行和管理数据库)、MySQL客户(mysql,它提供了一个访问服务器的接口),以及出于维护等目的而提供的大量实用程序。PHP对MySQL的支持一直很好,在PHP的最新版本中,这一点表现得更为突出。

MySQL以处理大型数据库而著称,数据库可以包含60 000张表,以及超过50亿行的记录。在某些操作系统上,MySQL可以处理容量高达800万TB的表,在其他操作系统上,一般可以正常地处理4 GB的数据。MySQL已被NASA、美国人口普查局(United States Census Bureau)以及许多其他机构采用。

在编写本书时,MySQL已经推出了版本5.5.13,并且版本5.6和版本6.0正在开发中。因为不同的MySQL版本有不同的特性,所以要清楚地知道你自己正在使用什么版本就非常重要了。本书使用的是MySQL 5.1.44和5.5.8,尽管只要使用MySQL 5.0以上版本就应该能够完成本书中的任何事情。

你需要什么

要理解本书的示例,你需要以下工具:

  • Web服务器应用程序(例如,Apache、Abyss或IIS);

  • PHP;

  • MySQL;

  • Web浏览器(微软公司的IE、Mozilla的Firefox、Apple的Safari、Google的Chrome等);

  • 文本编辑器、支持PHP的所见即所得的应用程序(Adobe的Dreamweaver就具有这种能力)或者IDE(Intergrated Development Environment,集成开发环境);

  • FTP应用程序(如果使用远程服务器)。

利用PHP和MySQL开发动态Web站点的一大优点是,无论什么要求都可以免费得到满足,而不管使用的操作系统是什么!Apache、PHP和MySQL全都是免费的,大多数Web浏览器可以免费拥有,许多优秀的文本编辑器可供免费使用。

本书附录(可以从本书的支持网站http://www.peachpit.com下载)讨论了在Windows和Mac OS X操作系统上的安装过程。如果有一台计算机,那么只需下载两个产品即可创建动态Web站点(在这种情况下,你的计算机同时代表图0-4和图0-5中的客户端和服务器)。另外,你还可以以每月几美元的价钱购买Web虚拟主机服务,它会提供支持PHP和MySQL的已经在线的环境。

关于本书

本书讲述了如何利用PHP和MySQL来开发动态Web站点,涵盖了大多数开发人员可能需要的知识。为了与Visual QuickPro系列图书的格式保持一致,本书中使用逐步引导、图文并茂的方式来讨论。其重点依然放在实战性很强的示例上,而不像有些书那样,老是说什么“这些事情你能够做到但是永远也不要去做”。我自己就是一名Web开发人员,书里写的都是我会用到的信息,并且避免了那些对手边的任务来说无关紧要的东西。而作为一名老作者,我肯定会包括读者想知道的主题和技术。

本书采用了循序渐进的结构。前3章介绍了PHP的基础知识(通过学习第2章,你就会开发你的第一个动态Web页面)。之后,第4~7章介绍了SQL(Structured Query Language,结构化查询语言,用于和所有数据库进行交互)和MySQL。它们介绍了SQL和数据库设计的基础知识,并且特别介绍了MySQL应用程序。然后,第8章介绍了调试和错误管理,这些是每个人都需要的信息。第9章专门介绍了如何结合使用PHP和MySQL,这非常容易做到。

第10~14章讲述了更多的应用技术,可以充实你的知识。特别是,这几章中反复介绍了安全方面的内容。第15章和第16章是本书这一版中的全新内容,介绍了一些新技术。最后,本书包含了专门介绍示例的3章内容,其中开发了几类Web应用程序的核心,并穿插了许多说明。

本书读者对象

本书读者面很广,从初学者到中级用户都可以学习本书。考虑将来的兼容性问题,本书使用了XHTML,因此读者必须具有使用XHTML或其前身HTML的丰富经验。尽管本书涵盖了很多方面,但它没有正式讲述HTML或Web页面设计。这些页面少量使用了一些CSS,但是这里没有讲授它。

其次,本书希望读者具有以下素质之一:

  • 学习的动力和能力,而不需要被人牵着鼻子走;

  • 熟悉另一种编程语言(具备丰富的JavaScript知识也足够了);

  • 对PHP有一定的了解。

本书涵盖了PHP和MySQL方方面面的内容,讲述了开发现实的Web站点需要知道的一切知识,不过,要特别指出的是,开头几章以较快的速度介绍了PHP。出于这种原因,我建议在开始学习新内容时,最好具备一些编程经验或者好奇和独立的精神。如果你发现有些内容讲得太快,那么从学习我的PHP for the World Wide Web: Visual QuickStart Guide的最新版本1开始起步可能更好,其中的行文速度更适中。

1 中文版《PHP基础教程(第4版)》,由人民邮电出版社出版。——编者注

学习本书不需要任何数据库经验,因为本书是从最基本的级别开始讨论SQL和MySQL的。

这一版本的新增内容

本书的前3个版本非常受欢迎,我收到了许多肯定的反馈意见(感谢!)。在编写此新版本时,我希望不仅仅是更新PHP和MySQL最新版本的内容,尽管这是全书的首要考虑事项。你将会发现其他新特性:

  • 用新的示例演示读者迫切需要了解的技术;

  • 另外一些高级MySQL和SQL示例;

  • jQuery JavaScript框架使用手册;

  • 介绍面向对象编程基础知识和基本语法;

  • 提升脚本和网页安全性的更多信息和示例;

  • 用一整章的篇幅专门介绍如何阻止常见的Web站点滥用和攻击;

  • 用全新的一章介绍使用多种语言和时区;

  • 用全新的一章示例介绍创建消息板(也称论坛);

  • 扩展和更新了安装和配置指导;

  • 删除了过时的内容(例如,PHP的老版本中使用的特性或者不适用的特性)。

  • 这一版在每一章的末尾新加入“回顾和实践”小节。该小节的目的是回顾那一章介绍的主要内容,给出一些练习,并以所学内容为基础进一步扩展相关知识。

对于买过本书前几版的读者(多谢啊),我相信这些新特性也会使这一版本成为你的案头必备。

与我的其他图书的比较

这是我编写的第四本关于PHP和/或MySQL主题的图书,下面按顺序列出之前出版的另外3本书:

  • PHP for the World Wide Web: Visual QuickStart Guide

  • PHP 5 Advanced for the World Wide Web: Visual QuickPro Guide

  • MySQL: Visual QuickStart Guide

我希望这份履历暗示了我具有某种资格来编写本书,但是,作为读者,你该如何选择呢?当然,我非常欢迎你慷慨地购买全套书,对你的这种做法,我会致以无尽的谢意,但是,如果你不得不从中选择一本书……

PHP for the World Wide Web: Visual QuickStart Guide一书非常适合作为PHP的初学者指南。它与本书有一些重叠,大部分出现在前3章中,但是使用了新的示例,因此读者并不会觉得多余。对于初学者,可以在阅读那本书后再阅读本书。肯定应该在阅读了本书之后再阅读PHP 5 Advanced for the World Wide Web: Visual QuickPro Guide一书,因为它假定读者具有相当多的知识并且是在这里介绍的许多内容的基础上编写的。MySQL: Visual QuickStart Guide一书重点关注的几乎都是MySQL独有的内容(只有两章使用了PHP)。

在记住这些后,阅读“本书读者对象”一节的内容,并看看其中的要求是否适合你自己。如果你根本没有任何编程经验,并且更希望得到更细致的引导,那么我的第一本书可能更适合你。如果你已经对使用PHP感到得心应手,并且想学习它的更多高级功能,可选择第二本书。如果你最感兴趣的是MySQL,并且不怎么热衷于学习关于PHP的大量知识,那么可以购买第三本书。

如前所述,如果你想学习今天利用PHP和MySQL开始开发动态Web站点所需要知道的一切知识,那么本书就适合你!它涵盖了这两种技术的最新版本,使用了其他图书中以前未讨论的技术,并且包含了独具特色的示例。

无论你选择哪一本书,都要选择最新版本,或者与你将使用的技术最匹配的版本。

配套网站

我专门为本书开发了一个配套网站www.LarryUllman.com2在这里,你将找到本书中的每一个脚本、包含冗长的SQL命令的文本文件以及勘误表(如果你有关于命令或脚本方面的问题,并且正好在学习本书,请检查勘误表以确保没有印刷错误)。在该网站上,你还会发现有用的Web链接以及一个非常受欢迎的论坛,读者可以在里面相互问问题并进行解答(我自己解答了其中许多问题),等等。

2 读者也可将中文版评论、勘误发到图灵社区本书的页面中,社区网址:ituring.com.cn。——编者注

问题、评论或建议

如果你有关于PHP或MySQL的任何问题,应该求助于现有的许多网站、邮件列表、新闻组和FAQ仓库。搜索引擎可以找到几乎无限的资源。如果你需要得到即时解答,这些资源或搜索引擎可以基本满足你的需要(十有八九已经有人遇到并解决了你的问题)。

你也可以直接把你的问题、评论和建议发送给我。你可以使用本书的相应论坛得到最快的答复(我总是优先解答这些问题)。如果你更喜欢给我发送电子邮件,网站上提供了我的联系方式。尽管我不能保证会迅速给出回复,但我会尽力答复收到的每封电子邮件。

出版社提示:查看作者Larry Ullman随附的教学视频

可视化快速入门教程(Visual QuickStart Guides)现在更加“直观”: 由于Visual QuickStart Guides系列书籍非常畅销,Peachpit出版社提供了1个多小时的任务试教学视频,可以帮助你快速掌握关键的特性和技术。你可以一边阅读书中的PHP和MySQL脚本,一边看实战视频。这是一种非常理想的学习基础知识和新的、更复杂的特性的方式。请访问Peachpit网站,你就可以看到一些免费的视频,也可以很方便地购买其他视频。

目录

  • 版权声明
  • 献词
  • 前言
  • 特别感谢
  • 第1章 PHP概述
  • 第2章 PHP编程
  • 第3章 创建动态Web站点
  • 第4章 MySQL简介
  • 第5章 SQL简介
  • 第6章 数据库设计
  • 第7章 高级SQL和MySQL
  • 第8章 错误处理和调试
  • 第9章 使用PHP和MySQL
  • 第10章 常用编程技术
  • 第11章 Web应用程序开发
  • 第12章 cookie和会话
  • 第13章 安全性方法
  • 第14章 Perl兼容的正则表达式
  • 第15章 jQuery简介
  • 第16章 面向对象编程入门
  • 第17章 示例——论坛
  • 第18章 示例——用户注册
  • 第19章 示例——电子商务