PHP和MySQL Web开发(原书第4版)【入门级神作,享誉全球的开发圣经】
欢迎来到PHP和MySQL Web开发的世界。在本书中,你将学习我们在使用PHP和MySQL中得到的经验精华。同时,PHP和MySQL也是目前最热门的两个Web开发工具。
在前言中,我们将介绍:
■ 为什么要学习本书
■ 使用本书将学习到哪些知识
■ PHP和MySQL都是什么及其伟大之处
■ PHP和MySQL最新版本的变化
■ 本书的组织结构
为什么要学习本书本书将介绍如何创建可交互的Web站点,包括从最简单的订单表单到复杂的安全电子商务站点,甚至是交互式的Web 2.0网站。而且,读者还将了解如何使用开源技术来实现它。
本书的目标读者群是已经了解了HTML基础知识,并且以前曾经使用过一些现代编程语言进行过程序开发的读者。但是这并不要求读者从事过Internet 编程或者使用过关系数据库。如果你是入门级程序员,你将发现本书还是非常有用的,但是你可能会需要更长的时间来吸收和消化它。我们尽量做到不遗漏任何基本 概念,但是我们在介绍这些基本概念的时候都比较简略。本书的典型读者是希望掌握PHP和MySQL并致力于创建大型或电子商务类型Web站点的人。有些读 者可能已经使用过另一种Web开发语言,如果是这样的话,就更容易掌握本书的内容。
我们编写本书第1版的原因在于,我们已经厌倦了寻找那些 充其量只是基本的PHP函数参考的图书。那些图书是有用的,但是当你的老板或客户说“赶快给我编写一个购物车”时,那些图书无法帮助你。我们尽量使本书中 的每一个例子都有实用价值。许多示例代码可以在Web站点上直接使用,而大多数代码只要稍微经过修改就可以直接使用。
使用本书将学习到哪些知识 学习了本书以后,读者将能够创建实用的动态Web站点。如果读者已经使用普通的HTML创建Web站点,将意识到这种方法的局限性。一个纯HTML网站 的静态内容就只能是静态的。除非专门对其进行了更新,否则其内容将不会发生变化。用户也无法以任何形式与站点进行交互。
使用一种编程语言(例如,PHP)和数据库(例如,MySQL),可以创建动态的站点:你可以自定义站点并且在站点中包含实时信息。
在本书中,我们花费了大量的精力来介绍实用的应用程序。我们从一个简单的在线订购系统开始,然后介绍PHP和MySQL的不同部分。
我们将讨论与创建一个实用Web站点相关的电子商务和安全性方面的问题,并且介绍如何使用PHP和MySQL来实现这些方面。
在本书的最后部分,我们将介绍如何实现实际项目,并且和读者一起设计、计划并且构建如下项目:
■ 用户身份验证和个性化设置
■ 购物车
■ 基于Web的电子邮件
■ 邮件列表管理器
■ Web论坛
■ PDF文档的生成
■ 使用XML和SOAP连接Web服务
■ 使用Ajax构建Web 2.0应用程序
这些项目都是可以直接使用的,或者可以经过一定的修改来满足读者的实际需要。我们选择这些项目是因为我们相信这8个项目是程序员创建基于Web应用程序时最常见的项目。如果读者的需要有所不同,本书也可以帮助读者实现目标。
什么是PHPPHP是一种服务器端脚本语言,它是专门为Web而设计的。在一个HTML页面中,你可以嵌入PHP代码,这些代码在每次页面被访问时执行。PHP代码将在Web服务器中被解释并且生成HTML或访问者看到的其他输出。
PHP是1994年出现的,最初只是Rasmus Lerdorf一个人的工作成果。其他一些天才改进了这种语言,它经历了4次非常重要的重新编写,才变成了我们今天所看到的广为使用的、成熟的PHP。到 2007年11月,PHP已经在全球的2100多万个网站域中安装,而且该数字还在不断地快速增长。访问 /usage.php站点,你可以获得当前的确切数据。
PHP是一个开放源代码的产品,这就意味着,你可以访问其源代码,也可以免费使用、修改并且再次发布。
PHP最初只是Personal Home Page(个人主页)的缩写,但是后来经过修改,采用了GNU命名惯例(GNU = Gnu誷 Not UNIX),如今它是PHP超文本预处理程序的缩写。
目前,PHP的主要版本是第5版。该版本的Zend引擎经过了完全的重写,而且还实现了一些主要的语言改进。
PHP的主页是:。
Zend Technologies的主页是:。
MySQL是什么MySQL是一个快速而又健壮的关系数据库管理系统(RDBMS)。
一个数据库将允许你高效地存储、搜索、排序和检索数据。MySQL服务器将控制对数据的访问,从而确保多个用户可以并发地使用它,同时提供了快速访问并 且确保只有通过验证的用户才能获得数据访问。因此,MySQL是一个多用户、多线程的服务器。它使用了结构化查询语言(SQL),这是全球通用的标准数据 库查询语言。MySQL是在1996年公布的,但是其开发历史可以追溯到1979年。它是世界上最受欢迎的开源数据库,已经多次获得《Linux Journal》杂志的读者选择奖。
MySQL可以通过一个双许可模式获得。我们可以在开源许可(GPL)下使用它,条件是你需要满足该协议的一些条款。如果希望发布一个包括MySQL的非GPL应用程序,可以购买一个商业许可。
为什么要使用PHP和MySQL当我们准备创建一个站点时,可以选择使用许多不同的产品。
你必须选择如下:
■ Web服务器所需的硬件
■ 操作系统
■ Web服务器软件
■ 数据库管理系统
■ 编程语言或脚本语言
这些产品的选择具有相互的依赖性。例如,并不是所有操作系统都可以在所有硬件上运行,并不是所有Web服务器都支持所有编程语言。
本书中,我们没有也不需要更多地关注硬件、操作系统、Web服务器软件。其中一个最主要的原因是PHP和MySQL能在所有主流操作系统和许多非主流系统中运行。
大部分PHP代码可以在操作系统和Web服务器之间导入/导出。某些PHP函数是与操作系统的文件系统相关,但是在本书中,我们尽量标识出这些函数。
无论选择何种硬件、操作系统和Web服务器,我们相信你会认真考虑使用PHP和MySQL。
PHP的一些优点PHP的主要竞争对手是Perl、Microsoft ASP.NET、Ruby(on Rails或其他)、JavaServer Pages(JSP)和ColdFusion。
与这些产品比较,PHP具有很多优点,如下所示:
■ 高性能
■ 可扩展性
■ 与许多不同数据库系统的接口
■ 内置许多常见Web任务所需的函数库
■ 低成本
■ 容易学习和使用
■ 对面向对象的高度支持
■ 可移植性
■ 开发方法的灵活性
■ 源代码可供使用
■ 技术支持和文档可供使用
接下来我们将详细介绍这些优点。
性能
PHP的速度非常快。使用一个单独的廉价的服务器,就可以满足每天几百万的点击。
Zend Technologies()公司发布的评测表明PHP的性能要优于其竞争产品。
扩展性
PHP具有Rasmus Lerdorf经常提到的“shared-nothing”架构。这就意味着,你可以有效并廉价地对大量服务器进行水平方向扩展。
数据库集成
对于许多数据库系统来说,PHP都具有针对它们的内置连接。除了MySQL之外,你可以直接连接到PostgreSQL、mSQL、Oracle、 dbm、FilePro、Hyperwave、Informix、InterBase和Sybase数据库。PHP 5还提供了针对普通文件(平面文件)的内置SQL接口,名为SQLite。
使用开放式数据库连接标准(ODBC),可以连接到任何提供了ODBC驱动程序的数据库。
这包括Microsoft产品和许多其他产品。
除了本机函数库,PHP还提供了数据库访问抽象层,名为PHP数据库对象(PDO),它提供了对数据的一致性访问,并且倡导了安全的编码实践。
内置的函数库
由于PHP是为Web开发而设计的,它提供了许多内置函数用来执行有用的Web任务。
它可以生成一个图像、连接到Web服务和其他网络服务、解析XML、发送电子邮件、使用cookie以及生成PDF文档,所有这些任务只需要非常少的几行代码。
成本
PHP是免费的,用户可以在任何时候从站点免费下载最新版本。
容易学习PHP
PHP的语法是基于其他编程语言的,主要是C和Perl。如果读者已经了解了C或Perl,或者其他类似C的语言,例如C++或Java,那么几乎立即就可以高效地使用PHP。
对面向对象的支持
PHP版本5具有设计良好的面向对象特性。如果读者学习了使用Java或C++进行编程,将发现所期望的一些特性(和常见语法),例如继承、私有和受保 护的属性和方法、抽象类和方法、接口、构造函数和析构函数。读者还将发现一些不常见的特性,例如迭代器。该功能的一部分可以在PHP版本3和版本4中获 得,但是版本5中具有更全面的面向对象支持功能。
可移植性
PHP在许多不同的操作系统中都可以使用。我们可以在类似于UNIX的 免费操作系统中(例如FreeBSD和Linux)编写PHP代码,也可以在商业性的UNIX版本(例如Solaris和IRIX,Mac OS X)或者在Microsoft Windows的不同版本中编写代码。
通常,代码不经过任何修改就可以在运行PHP的不同系统中运行。
开发方法的灵活性
PHP允许实现简单的任务,同样,也很容易应用到大型应用程序的实现,例如使用基于设计模式的框架(例如,模型-视图-控制器,MVC)。
源代码
我们可以访问PHP的所有源代码,与商业性的封闭式源代码产品不同,如果要在该语言中进行修改或者添加新特性,可以免费进行。
我们无须等待开发商来发布补丁,也不需要担心开发商倒闭或者决定停止对一个产品的支持。
可供使用的技术支持和文档
Zend Technologies()公司,实现PHP的后台引擎公司,通过提供商业性技术支持和相关的软件为PHP开发提供支持。
PHP文档和社区都非常成熟,有大量的共享信息资源。
PHP 5.0的新特性
最近,读者可以从PHP 4.x版本转移到PHP 5.0版本。正如读者期望的那样,在一个新的主要版本中,它做出了一些重要变更。在这个版本中,PHP后台的Zend引擎经过了完全的重写。主要的新特性如下:
■ 通过一个完整的新的对象模型提供了更好的面向对象支持(请参阅第6章)。
■ 可扩展和可维护的错误处理—异常(请参阅第7章)。
■ XML数据的简单处理—SimpleXML(请参阅第33章)。
其他变化还包括在PHP的默认安装中去除了一些扩展,并且将这些扩展放入PECL库中,改进了对流的支持以及添加了SQLite。
本书在编写时,PHP 5.2是当前最新版本,而5.3也将要发布。PHP 5.2添加了大量有用的特性,如下所示:
■ 新的输入过滤扩展,适用于安全性问题
■ JSON扩展,更好的Javascript交互
■ 文件上传进度跟踪
■ 更好的日期和时间处理
■ 客户端函数库的大量更新,性能改进(包括Zend引擎中,更好的内存管理)和Bug修复
PHP 5.3的关键特性
你可能听说了PHP最新的主要发布版本PHP 6。在本书编写时,PHP 6还未发布,一些主机服务提供商还不会安装它。但是,PHP 6中的一些关键特性可以追溯到PHP 5.3版本,事实上,5.3是一个小版本的发布,基本上通过了可接受性测试,因此一些主机服务提供商安装了它(当然,如果你是主机管理员,可以安装任何喜 欢的版本)。
PHP 5.3中的一些新特性如下所示(相关特性的介绍也会在本书的适当章节给出):
■ 名称空间的增加。更多信息,请参阅。
■ intl扩展的增加,它为应用程序的国际化提供帮助,更多信息,请参阅 net/manual/en/intro.intl.php。
■ phar扩展的增加,它应用于创建自包含PHP应用包。更多信息,请参阅 net/book.phar。
■ fileinfo扩展的增加,它应用于文件处理的改进。更多信息,请参阅 net/manual/en/book.fileinfo.php。
■ sqlite3扩展的增加,它应用于SQLite嵌入式SQL数据库引擎。更多信息,请参阅。
■ 支持MySQLnd驱动程序,替代了libmysql;更多信息,请参阅 wiki/PHP_MYSQLND。
虽然以上包含了PHP 5.3版本的重要特性,但是该版本还包括了大量Bug修复以及对已有功能的改进,例如:
■ 删除了对早于Windows 2000的Windows操作系统的支持(例如,Windows 98和NT 4)。
■ 确保PCRE、 Reflection和 SPL扩展的启用。
■ 增加一些日期和时间函数,更方便于日期计算和处理。
■ 改进了crypt()、hash()和md5()函数的功能以及OpenSSL扩展。
■ 改进了php.ini管理和处理,包括更好的错误报告。
■ 继续对Zend引擎进行调优,实现更好的PHP运行时速度和内存的使用。
MySQL的一些优点MySQL的主要竞争产品包括PostgreSQL、Microsoft SQL Server和Oracle。MySQL具有许多优点,如高性能、低成本、易于配置和学习、可移植性、源代码可供使用、技术支持可供使用等,接下来,我们将详细介绍这些优点。
性能
不可否认,MySQL的速度是非常快的。在站点,你可以找到许多开发人员的评 测页面。这些评测结果表明MySQL的运行速度比其竞争产品要快很多。在2002年,《eWeek》杂志发布了一个关于实现Web应用程序的5个数据库的 评测结果。最佳结果是MySQL和成本昂贵得多的Oracle。
低成本
在开放源代码许可下,MySQL是免费的,而在商业许可下,MySQL也只需要很少的费用。
如果读者希望将MySQL作为应用程序的一部分重新发布,并且不希望在开放源代码许可下授权应用程序,那么必须获得一个商业许可。如果读者并不打算发布应用程序(适用于大多数Web应用程序)或者只开发免费软件,那么就不需要购买许可。
便于使用
大多数现代数据库都使用SQL。如果读者曾经使用过其他RDBMS,就会很容易使用MySQL。MySQL的安装也比其他类似产品的安装要简单。
可移植性
MySQL可以在许多不同的UNIX系统中使用,同时也可以在Microsoft的Windows系统中使用。
源代码
和PHP一样,读者可以获得并修改MySQL的源代码。对大多数用户来说,在大多数情况下这一点并不重要,但是它消除了后顾之忧,可以确保未来的持续性,并且提供了紧急情况下的选择。
技术支持可供使用
并不是所有开放源代码产品都有一家母公司,来提供技术支持、培训、顾问和认证,但是读者可以从MySQL AB获得所有这些服务()。
MySQL 5.0的新特性
MySQL 5.0版本新引入的主要变化包括:
■ 视图
■ 存储过程(请参阅第13章)
■ 基本触发器的支持
■ 对游标的支持
其他变化还包括多个ANSI标准的兼容以及速度的改进。如果读者还是使用MySQL服务器的早期4.x版本或3.x版本,应该知道如下特性已经陆续加入到了4.0以后的版本:
■ 对子查询的支持
■ 用于存储地理数据的GIS类型
■ 对国际化的改进支持
■ 作为标准,引入了InnoDB这个事务安全的存储引擎
■ MySQL查询缓存,极大提高了Web应用程序通常会执行的重复查询速度
本书所使用的示例是基于MySQL 5.1(Beta Community版本)。这个版本还添加了如下支持:
■ 分区
■ 基于行的复制
■ 事件调度
■ 将日志保存于表
■ MySQL群集、信息模式、备份过程的改进以及大量的Bug修复
本书的组织结构本书分为5个部分(除此之外,还有“附录”):
第一篇“使用PHP”,通过一些示例概述了PHP语言的主要部分。每一个例子都是在构建实际电子商务站点时可能用到的例子。在第一篇中,第1章是 “PHP快速入门教程”。如果读者已经使用过PHP,可以跳过这一章。如果读者是第一次使用PHP或者是入门程序员,那么可能需要花一些时间在这一章上。 如果读者非常熟悉PHP,但却不是很了解PHP 5,可能会希望阅读第6章,因为在PHP 5中,面向对象功能有了非常明显的变化。
第二篇“使用MySQL”,将介绍一些概念和设计,包括使用关系型数据库系统(例如MySQL)、使用SQL、使用PHP连接MySQL数据库以及MySQL的高级技术(例如,安全性和优化)的使用。
第三篇“电子商务与安全性”,介绍了使用任何语言开发电子商务站点所涉及的一些常见问题。我们还将介绍如何使用PHP和MySQL来进行用户身份验证,以及安全地搜集、传输和保存数据。
第四篇“PHP的高级技术”,提供了PHP中一些主要内置函数的详细介绍。我们选择了一些在创建站点时可能用到的函数库进行介绍。读者将学习如何与服务器进行交互、如何与网络进行交互、图像的生成、时间和数据的操作以及会话变量。
第五篇“创建实用的PHP和MySQL项目”是我们最喜欢的一篇,主要介绍如何解决现实项目中可能遇到的实际问题,例如管理和调试大型项目。本章提供了一些能够说明PHP和MySQL强大功能的示例项目。