译者序 The Translator's Words
PHP和MySQL依旧是如今比较流行的开源技术之一,非常适用于Web应用的开发。
PHP是一种服务器端脚本语言,可以用于生成动态内容。它功能强大,与HTML脚本融合在一起,并内置有访问数据库的功能。
MySQL是基于SQL的、完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统。它具有功能强大、使用简便、管理方便、运行速度快、安全可靠性强等优点,用户可利用多种语言编写访问MySQL 数据库的程序。
本书内容丰富完备,示例简单实用。书中既包括了PHP语言的基础知识,又包括了MySQL数据库的使用基础;既提供了PHP基础编程技巧,又介绍了PHP与MySQL的实战沉淀。除此之外,书中还涵盖了国际化、本地化以及安全性话题。对于开发安全的、适用于全球用户的Web应用来说,本书的确是一本不可多得的宝典。
本书第一篇和第二篇依旧分别是PHP和MySQL的入门介绍,第三篇探讨了Web应用安全问题,第四篇介绍PHP的高级编程技术,第五篇重点在实战。针对当前最新Web应用开发潮流,介绍了几个重要的Web产品实现细节,包括设计、计划、实施以及测试环节。这些实用项目包括:
用户身份验证和个性化
基于Web的电子邮件客户端
社交媒体集成
购物车
第5版在第4版的基础上进行了全面更新、重写和扩展,详尽介绍了PHP 5.6到7的版本更新和新特性,此外还介绍了MySQL最新版本的新特性。
综观全书,内容广泛,风格严谨,理论和实践紧密结合。既有详细的概念说明,又有复杂而完整的实例代码,读者能够轻松地将自己所学的理论知识付诸实践。正是出于这个原因,本书适用的读者非常广泛。对于初学者来说,本书可以作为教材和参考书;对于有丰富经验的PHP和MySQL高手,本书也是一本很好的参考手册,因此本书适用于各个层次的PHP程序员。另外,第5版的中文版也对第4版的一些翻译错误进行了更正。
参加本书翻译工作的有:熊慧珍、武欣、于广乐、陶立秋、于苗苗、罗剑锋、姜燕梅、罗云峰,最后由武欣统稿。
由于译者水平所限,不当和错误之处在所难免,敬请各位专家和读者批评指正。
译 者
2017年10月
About the Authors 作者简介
Luke Welling是OmniTI公司的一名软件工程师,经常出席一些国际会议(例如,OSCON、ZendCon、MySQLUC、PHPCon、OSDC以及LinuxTag)并就开源和Web开发话题发表演讲。在加入OmniTI公司之前,他曾作为数据库提供商MySQL AB的Web分析师为Hitwise.com公司工作。此外,他还是Tangled Web Design公司的独立顾问,并曾在澳大利亚墨尔本RMIT大学教授计算机科学课程。他拥有应用科学(计算机科学)的学士学位。
Laura Thomson是Mozilla公司的研发总监。之前,她是OmniTI公司和Tangled Web Design公司的董事。此外,Laura曾经在RMIT大学和波士顿咨询公司工作过。她拥有应用科学(计算机科学)学士学位和工程学(计算机系统工程)学士学位。闲暇时间,她非常喜欢骑马,热衷于免费软件和开源软件。
贡献作者
Julie C. Meloni是一名软件开发经理以及技术顾问,生活在华盛顿特区。她编著过一些图书,发表过一些文章,主要集中在基于Web的开发语言和数据库领域,其中包括畅销书《Sams Teach Yourself PHP,MySQL, and Apache All in One》。
John Coggeshall是Internet Technology Solutions公司的创始人,该公司是Internet和PHP相关的顾问公司,服务于全球用户。同时,他还是CoogleNet公司的创始人,该公司是基于WiFi网络的订阅服务公司。作为Zend Technologies公司全球服务团队的资深成员,他从1997年开始使用PHP,目前已经出版了4本相关图书并发表了超过100篇关于PHP技术的文章。
Jennifer Kyrnin是一名Web设计人员,自1995年开始从事Web设计和图书编写。她出版的图书包括《Sams Teach Yourself Bootstrap in 24 Hours》《Sams Teach Yourself Responsive Web Design in 24 Hours》以及《Sams Teach Yourself HTML5 Mobile Application Development in 24 Hours》。
前 言 Preface
欢迎来到PHP和MySQL Web开发的世界。在本书中,我们将把使用PHP与MySQL的经验和心得体会毫无保留地分享给你,PHP和MySQL是目前最热门的两个Web开发工具。
前言主要介绍以下内容:
为什么要学习本书
学习本书将掌握哪些知识
PHP和MySQL及其强大之处
PHP和MySQL最新版本变化
本书组织结构
下面,就让我们开始吧!
为什么要学习本书
本书将介绍如何创建可交互的Web应用,包括从最简单的订单表单到复杂而又安全的Web应用。此外,读者还将了解如何使用开源代码技术来实现它。
本书的目标读者群是已经了解了HTML的基础知识,并且以前曾经使用过一些现代编程语言进行过程序开发的读者,但是并不要求读者从事过Web编程或者使用过关系型数据库。如果你是入门级程序员,你也将发现本书是非常实用的,但是你可能会需要更长的时间来吸收和消化它。我们尽量做到不遗漏任何基本概念,但是在介绍这些基本概念的时候都比较简略。本书的典型读者是希望掌握PHP和MySQL并致力于创建大型或电子商务类型Web站点的人。有些读者可能已经使用过其他Web开发语言;如果是这样,就更容易掌握本书的内容。
编写本书第1版的原因在于,我们已经厌倦了寻找那些充其量只是最基本的PHP函数参考的图书。那些图书是有用的,但是当老板或客户要求你赶快编写一个购物车时,那些图书无法帮助你。我们尽量使本书中的每一个示例都有实用价值。许多示例代码可以在Web站点上直接使用,而大多数代码只要稍做修改就可以直接使用。
学习本书将掌握哪些知识
学习本书后,读者将能够创建实用的动态Web站点。如果你已经使用过普通HTML创建Web站点,你将认识到这种方法的局限性。一个纯HTML网站的静态内容就只能是静态的。除非专门对其进行手动更新,否则其内容不会发生变化。用户也无法以任何有意义的方式与站点进行交互。
使用一种编程语言(例如,PHP)和数据库(例如,MySQL),可以创建动态的站点,也可以自定义站点并且在站点中包含实时信息。
在本书中,即使是在介绍性章节,我们也是以实战应用的介绍为重点。本书从一个简单系统开始,然后介绍PHP和MySQL的不同部分。
之后讨论与创建一个真实Web站点相关的安全性和身份验证方面的问题,并且介绍如何使用PHP和MySQL来实现这些功能。通过讨论JavaScript及其在Web应用开发中的角色,介绍如何集成协同前端和后端技术。
本书第五篇将介绍如何开发真实项目,并且和读者一起设计、计划及构建如下项目:
用户身份验证和个性化
基于Web的电子邮件客户端
社交媒体集成
这些项目都是可以直接使用的,或者可以经过一定的修改来满足读者的实际需要。之所以选择这些项目是因为我们相信它们是Web程序员最常面临的项目。如果读者的需求有所不同,本书也可以帮助大家实现目标。
什么是PHP
PHP是一种专门为Web设计的服务器端脚本语言。在一个HTML页面中,可以嵌入PHP代码,这些代码在页面每次被访问时执行。PHP代码将在Web服务器中被解释并且生成HTML或访问者可见的输出。
PHP出现于1994年,最初只是Rasmus Lerdorf一个人的投入。后来被一些天才所接受,它经历了数次重大的重写,才变成了我们今天所看到的广为使用的、成熟的PHP。根据Google公司的Greg Michillie 2014年5月的数据, PHP已经运行于全球75%的Web站点,而到2016年6月,这个数据已经变成82%。
PHP是一个开源的项目,这就意味着,你可以访问其源代码,也可以免费使用、修改并且再次发布。
PHP最初只是Personal Home Page(个人主页)的缩写,但是后来经过修改,采用了GNU命名惯例(GNU = Gnu抯 Not UNIX),如今它是PHP超文本预处理程序(PHP,Hypertext Preprocessor)的缩写。
目前,PHP的主要版本是7。该版本的Zend引擎经过完全重写,而且还实现了一些主要的语言改进。本书所有代码均已在PHP 7以及PHP 5.6下测试和验证。
PHP的主页是:http://www.php.net。
Zend Technologies的主页是:http://www.zend.com。
MySQL是什么
MySQL(发音为My-Ess-Que-Ell)是一个快速而又健壮的关系型数据库管理系统(Relational Database Management System,RDBMS)。数据库将允许你高效地存储、搜索、排序和检索数据。MySQL服务器将控制对数据的访问,从而确保多个用户可以并发访问数据、可以快速访问数据以及只有授权用户才能获得数据访问。因此,MySQL是一个多用户、多线程的服务器。它使用了结构化查询语言(SQL),该语言是标准数据库查询语言。MySQL是在1996年公布的,但是其开发历史可以追溯到1979年。它是世界上最受欢迎的开源数据库,已经多次获得“Linux Journal Readers?Choice”大奖。
MySQL可以在双许可模式下使用。可以在开源许可(GPL)下免费使用它,条件是满足该协议的一些条款。如果希望发布一个包括MySQL的非GPL应用程序,可以购买一个商业许可。
为什么要使用PHP和MySQL
当我们准备创建一个站点时,可以选择使用许多不同的产品。
你必须选择:
运行Web服务器的宿主:云、虚拟私有服务器或真实硬件
操作系统
Web服务器软件
数据库管理系统或其他数据存储
编程语言或脚本语言
也可以采用多种数据存储的混合架构。这些产品的选择具有相互依赖性。例如,并不是所有的操作系统都可以在所有的硬件上运行,并不是所有的Web服务器都支持所有的编程语言,等等。
在本书中,我们不会过于关注硬件、操作系统或Web服务器软件,我们也不需要关注这些。PHP和MySQL的一个最佳特性就是它们能够在任何主流操作系统和许多非主流操作系统上工作。
大部分PHP代码在不同的操作系统和Web服务器上都是可移植的。但是,也有一些与操作系统的文件系统相关的PHP函数,在本书以及PHP手册中,这些函数都将被明确标识出来。
无论选择何种硬件、操作系统和Web服务器,我们相信你会认真考虑PHP和MySQL。
PHP的一些优点
PHP的主要竞争对手是Python、Ruby on Rails、Node.js、Perl、Microsoft.NET和Java。
与这些产品相比,PHP具有很多优点,如下所示:
高性能
可扩展性
支持许多不同数据库系统的接口
内置许多常见Web任务所需的函数库
低成本
容易学习和使用
强面向对象支持
可移植性
开发方法的灵活性
源代码可用
可用的技术和文档支持
接下来将详细介绍这些优点。
性能
PHP速度非常快。使用一个独立的廉价服务器,就可以满足每天几百万次的点击量。它支持的Web应用小到电子邮件表单,大到整个站点,例如Facebook和Esty。
扩展性
PHP具有Rasmus Lerdorf经常提到的“shared-nothing”架构。这就意味着,可以使用大量普通服务器高效廉价地实现容量水平扩展。
数据库集成
对于许多数据库系统来说,PHP都具有针对它们的原生连接支持。除了MySQL之外,可以直接连接到PostgreSQL、Oracle、MongoDB和MSSQL数据库。PHP 5和PHP 7还增加了针对普通文件(SQLite)的内置SQL接口。
使用开放式数据库连接标准(ODBC),可以连接到提供了ODBC驱动程序的任何数据库。这包括Microsoft产品和许多其他产品。
除了原生函数库之外,PHP还提供了数据库访问抽象层,名为PHP数据库对象(PDO),它提供了对数据的一致性访问,并且倡导安全的编码实践。
内置函数库
由于PHP是为Web开发而设计的,因此它提供了许多内置函数来执行有用的Web任务。可以立即生成图像、连接到Web服务和其他网络服务、解析XML、发送电子邮件、使用cookie以及生成PDF文档,所有这些任务只需要少量代码行。
成本
PHP是免费的,可以在任何时候从http://www.php.net站点免费下载最新版本。
容易学习
PHP的语法是基于其他编程语言的,主要是C和Perl。如果读者已经了解了C或Perl,或者其他类似C的语言,例如C++或Java,那么几乎可以立即高效地使用PHP。
面向对象支持
PHP 5具有设计良好的面向对象特性,这些特性在PHP 7里得到改进。如果读者学过Java或C++编程,将发现你熟悉的一些特性(和常见语法),例如继承、私有和受保护的属性及方法、抽象类和方法、接口、构造函数和析构函数。读者还将发现一些不常见的特性,例如iterator和trait。
可移植性
PHP可用于多种操作系统。可以在类似于UNIX的免费操作系统(例如FreeBSD和Linux)、商业性的UNIX版本、Mac OS X或者Microsoft Windows的不同版本中编写PHP代码。
通常,代码不经过任何修改就可以运行于不同的操作系统。
开发方法的灵活性
通过基于设计模式的框架(例如,模型-视图-控制器,MVC),使用PHP,可以快速实现简单任务,或开发大型应用。
源代码可用
可以访问PHP的所有源代码。与商业性的封闭式源代码产品不同,可以免费在PHP中修改或者添加新特性。
我们无须等待开发商来发布补丁,也不需要担心开发商倒闭或者决定停止对一个产品的支持。
可用的技术和文档支持
Zend Technologies(www.zend.com)公司通过提供商业性技术支持和相关的软件为PHP开发提供支持。
PHP文档和社区都非常成熟,有大量的共享信息资源。
PHP 7.0的关键特性
2015年12月,期待已久的PHP 7终于问世。正如前面介绍的,本书将覆盖PHP 5.6和PHP 7,你可能会问“那PHP 6呢”?答案很简单:没有PHP 6,PHP 6没有正式发布过。但是,的确有开发人员开发过PHP 6,但最终没有取得成果。曾经也有些关于PHP 6的项目规划,但这些规划带来的复杂性让PHP开发团队最终放弃了PHP 6。PHP 7不是PHP 6,它并没有包含PHP 6的代码和特性,因此PHP 7有其自己的重点—性能。
在底层,PHP 7包含了Zend引擎的重构,为许多Web应用带来了明显的性能提升:有些甚至提升了100%!虽然PHP 7提升了性能,减少了内存使用量,但也引入了一些向下兼容的问题。事实上,PHP 7引入了非常少的向下兼容问题。在本书后续内容中,如果存在向下兼容问题,我们将专门介绍它,这样可以确保本书内容适用于PHP 5.6和PHP 7,毕竟在本书编写时,PHP 7还没有被商业性Web主机服务提供商广泛应用。
MySQL的一些优点
在关系型数据库领域,MySQL的主要竞争产品包括PostgreSQL、Microsoft SQL Server和Oracle。在Web应用开发领域,也有使用非SQL非关系型数据库(例如MongoDB)的趋势。接下来介绍为何MySQL仍旧适用于Web应用。
MySQL具备很多优点,包括:
高性能
低成本
易于配置和学习
可移植性
源代码可用
支持可用
下面将详细介绍以上优点。
性能
不可否认,MySQL的速度非常快。在http://www.mysql.com/why-mysql/benchmarks/站点,可以找到许多开发人员的评测页面。
低成本
在开源许可下,MySQL是免费的,而在商业许可下,MySQL也只需要很少的费用。如果读者希望将MySQL作为应用程序的一部分重新发布,并且不希望在开源许可下授权应用程序,那么必须获得一个商业许可。如果读者并不打算发布应用程序(适用于大多数Web应用)或者只是开发免费软件,那么就不需要购买许可。
易用
大多数现代数据库都使用SQL。如果读者曾经使用过其他的RDBMS,就能快速上手MySQL。MySQL的设置也比其他类似产品的设置简单。
可移植性
MySQL可以在许多不同的UNIX系统中使用,同时也可以在Microsoft的Windows系统中使用。
源代码可用
与PHP一样,读者可以获得并修改MySQL的源代码。对大多数用户来说,基本上不需要对MySQL源代码进行修改,但是由于有了源代码访问,它消除了开发者的后顾之忧,可以确保未来的持续性,并且提供了紧急情况下的选择。
事实上,目前MySQL也出现了一些分支,例如MariaDB,它们也由MySQL的原开发人员开发(包括Michael ‘Monty’ Widenius,http://mariadb.org),读者可以考虑使用。
支持可用
并不是所有的开源产品都有一家母公司来提供技术支持、培训、咨询和认证,但是读者可以从Oracle获得所有这些服务(因为Oracle收购了Sun公司,而Sun公司之前收购了MySQL AB)。
MySQL 5.x的新特性
在本书编写时,MySQL的最新版本是5.7。
在最近几个版本中,MySQL新引入的特性包括:
大范围的安全提升
InnoDB表的FULLTEXT支持
InnoDB的非SQL API支持
分区支持
复制改进,包括基于行的复制和GTID
线程池
可插拔验证
多核扩展性
更好的诊断工具
InnoDB作为默认引擎
IPv6支持
插件API
事件调度
自动升级
其他变化包括更多ANSI标准支持以及性能提升。
如果还在使用MySQL 4.x或3.x版本,你应该了解从MySQL 4.0版本开始新增加的特性:
视图
存储过程
触发器和游标
子查询支持
存储地理数据的GIS类型
国际化支持改进
事务安全存储引擎InnoDB
MySQL查询缓存,它极大地提升了Web应用常有的重复性查询的查询速度
本书的组织结构
本书分为五个部分(除此之外,还有附录)。
第一篇(使用PHP),通过一些示例概述了PHP语言的主要部分。每一个示例都是在构建真实电子商务站点时可能用到的示例,而不是一些泛泛的代码示例。如果读者已经使用过PHP,可以跳过第1章。如果读者是PHP新手或者是入门程序员,那么可能需要花一些时间阅读第1章。
第二篇(使用MySQL)将介绍一些概念和设计,这些概念和设计包括使用关系型数据库系统(例如MySQL)、使用SQL、使用PHP连接MySQL数据库,以及MySQL高级技术(例如,安全性和优化)的使用。
第三篇(Web应用安全性)介绍了使用任何语言开发Web应用所涉及的常见问题。还将介绍如何使用PHP和MySQL来进行用户身份验证,以及安全地搜集、传输和保存数据。
第四篇(PHP高级编程技术)提供了PHP中一些主要内置函数的详细介绍。我们选择了一些在创建Web应用时可能用到的函数库进行介绍。读者将学会如何与服务器进行交互、如何与网络进行交互、图像的生成、日期时间的操作以及会话处理。
第五篇(构建实用的PHP和MySQL项目)是我们最喜欢的一篇,主要介绍如何解决真实项目中可能遇到的实际问题,例如管理和调试大型项目,提供了一些能够说明PHP和MySQL强大功能的示例项目。
小结
我们希望你能喜欢本书,享受学习PHP和MySQL的过程,就像我们开始使用这些产品时的感受一样。PHP和MySQL的确是非常不错的产品。很快,你就能够加入成千上万的Web开发人员行列,同他们一起使用这些健壮、功能强大的工具来构建动态、实时的Web应用。