首页>参考读物>计算机科学与技术>软件与程序设计

PHP和MySQL Web开发(原书第5版)
作者 : [美] 卢克·韦林(Luke Welling), 劳拉·汤姆森(Laura Thomson) 著
译者 : 熊慧珍 武欣 罗云峰 等译
丛书名 : Web开发技术丛书
出版日期 : 2018-01-08
ISBN : 978-7-111-58773-6
定价 : 129.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 675
开本 : 16
原书名 : PHP and MySQL Web Development,Fifth Edition
原出版社: Pearson Education Asia
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书共分五部分。第一部分通过一些示例概述了PHP语言的主要部分,每一个示例都是在构建真实电子商务站点时可能用到的示例,而不是一些“玩具”代码示例。第二部分介绍一些概念和设计,这些概念和设计包括使用关系型数据库系统(例如MySQL)、使用SQL、使用PHP连接MySQL数据库以及MySQL高级技术(例如,安全性和优化)的使用。第三部分讲解使用任何语言开发电子商务站点所涉及的一些常见问题。我们还将介绍如何使用PHP和MySQL来进行用户身份验证,以及安全地搜集、传输和保存数据。第四部分提供了PHP中一些主要内置函数的详细介绍,读者将学会如何与服务器进行交互、如何与网络进行交互、图像的生成、日期时间的操作以及会话处理。第五部分主要介绍如何解决真实项目中可能遇到的实际问题,例如管理和调试大型项目,提供了一些能够说明PHP和MySQL强大功能的示例项目。

图书特色

“PHP和MySQL开发人员最棒的参考书,强烈推荐。”
——《The Internet Writing Journal》
“本书内容很值得信赖……还给出了一些完整的示例程序……无论你是PHP新手,还是正在寻找参考书的经验丰富的开发人员,本书都是你的明智选择。”
——Web Dynamic
PHP和MySQL是非常流行的开源技术,它们非常适合快速开发数据库驱动的Web应用。PHP是一种功能强大的脚本语言,专门用于帮助开发人员快速创建功能全面的Web应用,而MySQL是一个快速而又可靠的数据库,它能与PHP完美集成,用于创建基于互联网的动态应用。
本书介绍了如何使用这些工具创建高效和交互式Web应用,书中清晰地介绍了PHP语言的基础,解释了如何设置和使用MySQL数据库,以及如何使用PHP与数据库及Web服务器进行交互。
本书包括大量现实世界中的真实项目,这些项目示例实战性很强。书中介绍了与构建真实Web站点息息相关的安全和认证两个方面的主题,以及如何使用PHP和MySQL来实现它们。此外,书中还介绍了真实的Web应用涉及的前后端集成技术,例如JavaScript。
本书最后一篇介绍了如何构建真实项目,并带领读者一起设计、规划和构建了几个项目,其中包括:
用户身份认证和个性化
基于Web的电子邮件客户端
社交媒体集成
与本书第4版相比,第5版进行了全面更新、重写和扩展,详尽介绍了PHP 5.6到PHP 7的版本更新和新特性,以及MySQL最新版本的新特性。

图书前言

欢迎来到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应用。

专家评论

“我从来没有购买过如此棒的编程书籍……本书信息量大、容易掌握,文字浅显易懂,而且与我曾经购买过的其他计算机图书相比,它给出了最佳示例和实践建议。”
—Nick Landman
“Welling和Thomson撰写的这本书是我发现的唯一不可或缺的图书。文字清晰直观,从来不会浪费我的时间。本书结构合理,章节篇幅适当而且主题清晰。”
—Wright Sullivan,A&E工程公司董事长,南卡罗来纳-格里尔
“我只想告诉你,这本书真的太棒了!它逻辑清晰,难度适中,有趣易懂,当然,全是有用的信息!”
—CodE-E,奥地利
“关于PHP,有几本非常不错的入门级图书,但是Welling和Thomson所撰写的这本书对那些希望创建复杂而又可靠系统的人来说,是非常优秀的手册。很明显,作者在开发专业应用程序方面经验丰富,他们不仅教授了语言本身,还介绍了如何通过良好的软件工程实践来使用它。”
—Javier Garcia,Telefonica研发实验室高级电信工程师,马德里
“两天前我开始阅读本书,现在读了一半。我对它爱不释手。本书布局和结构严谨,读者可以很快掌握所有概念,示例也具有很强的实用性,是一本不容错过的好书。”
—Jason B. Lancaster
“本书内容很值得信赖,它给出了PHP的快速入门教程,并且全面地介绍了如何使用MySQL来开发Web应用程序。书中还给出了一些完整的示例程序,对于使用PHP创建模块化、可伸缩的应用程序来说,这些示例是非常不错的选择。无论你是PHP新手,还是正在寻找参考书的经验丰富的开发人员,这本书都是你的明智选择。”
—Web Dynamic
“Welling和Thomson撰写的这本书的确是学习PHP和MySQL开发的经典著作。它使我意识到编程和数据库对任何人来说都是可以掌握的;而我只了解本书所介绍内容的极少部分,我完全被它迷住了。”
—Tim Luoma, TnTLuoma.com
“Welling和Thomson撰写的这本书对于那些希望投入实战项目的人来说,是一本不错的参考用书。它包括了基于Web的电子邮件客户端、购物车、社交媒体集成等,从PHP的基础知识开始介绍,然后介绍MySQL的相关知识。”
—twilight30 on Slashdot
“这本书太精彩了……Welling和Thomson撰写的这本书中有我见到过的对正则表达式、类和对象以及会话等最好的介绍。我感觉本书让我理解了一些我原来不太理解的内容……本书深入地介绍了PHP函数和特性,此外还从项目经理的角度介绍了现实项目、MySQL集成以及安全性问题。我发现本书各个方面组织得非常合理,容易理解。”
—codewalkers.com站点的评论
“PHP和MySQL开发人员最棒的参考书,强烈推荐。”
—《The Internet Writing Journal》
“这本书太精彩了!我是一个经验丰富的编程人员,因此我并不需要太多的PHP语法介绍;毕竟它非常类似于C/C++。我不了解关于数据库的内容,但是当我准备(在其他项目中)开发一个图书评论引擎时,我希望找到一本关于使用PHP和MySQL的参考书。我有O扲eilly出版的《mSQL and MySQL》一书,该书可能是关于纯SQL的不错参考,但是本书在我的参考书中绝对占有一席之地……强烈推荐。”
—Paul Robichaux
“我读过的最棒的编程指南图书之一。”
—jackofsometrades,芬兰拉赫蒂
“这是一本非常不错的书,对于学习如何使用这两个最流行的开源Web开发技术创建Internet应用来说是非常优秀的……书中介绍的项目是本书的闪光点。不但是因为项目介绍和组织的逻辑结构合理,而且项目的选择也涵盖了许多Web站点常用的组件。”
—Craig Cecil
“本书采用了一种简单的、按部就班的方式向程序员介绍PHP语言。因此,我经常发现自己在进行Web设计时需要参考本书。我还在学习关于PHP的新知识,但是这本书给我提供了一个学习的基础,一直以来给了我很多帮助。”
—Stephen Ward
“本书是少数使我感动并“爱”上的图书之一。我不能将它放到我的书架中;我必须将它放在一个我伸手可及的地方,这样我就可以经常翻翻它。本书的结构合理,措辞简单而且直观。在阅读本书以前,我对PHP和MySQL一无所知。但是在阅读本书后,我就对开发复杂的Web应用充满了信心,而且掌握了足够的技术。”
—Power Wong
“这本书太棒了……我向任何数据库驱动的Web应用程序员强烈推荐此书。我希望更多的计算机图书能够按这样的方式进行编写。”
—Sean C Schertell

上架指导

计算机\Web设计

封底文字

“PHP和MySQL开发人员最棒的参考书,强烈推荐。”
——《The Internet Writing Journal》

“本书内容很值得信赖……还给出了一些完整的示例程序……无论你是PHP新手,还是正在寻找参考书的经验丰富的开发人员,本书都是你的明智选择。”
——Web Dynamic

PHP和MySQL是非常流行的开源技术,它们非常适合快速开发数据库驱动的Web应用。PHP是一种功能强大的脚本语言,专门用于帮助开发人员快速创建功能全面的Web应用,而MySQL是一个快速而又可靠的数据库,它能与PHP完美集成,用于创建基于互联网的动态应用。
本书介绍了如何使用这些工具创建高效和交互式Web应用,书中清晰地介绍了PHP语言的基础,解释了如何设置和使用MySQL数据库,以及如何使用PHP与数据库及Web服务器进行交互。
本书包括大量现实世界中的真实项目,这些项目示例实战性很强。书中还重点介绍了与构建真实Web站点息息相关的安全和认证两个方面的主题,以及如何使用PHP和MySQL来实现它们。此外,书中还介绍了真实的Web应用涉及的前后端集成技术,例如JavaScript。
本书最后一篇介绍了如何构建真实项目,并带领读者一起设计、规划和构建了几个项目,其中包括:
 用户身份认证和个性化
 基于Web的电子邮件客户端
 社交媒体集成
与本书第4版相比,第5版进行了全面更新、重写和扩展,详尽介绍了PHP 5.6到7的版本更新和新特性,以及MySQL最新版本的新特性。

译者序

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月

图书目录

本书赞誉
译者序
前言
作者简介
第一篇 使用PHP
第1章 PHP快速入门教程2
1.1 开始之前:了解PHP3
1.2 创建示例Web应用:Bob汽车零部件商店3
1.2.1 创建订单表单3
1.2.2 表单处理 5
1.3 在HTML中嵌入PHP5
1.3.1 PHP标记6
1.3.2 PHP语句7
1.3.3 空格7
1.3.4 注释 8
1.4 添加动态内容8
1.4.1 调用函数9
1.4.2 使用date()函数 9
1.5 访问表单变量10
1.5.1 表单变量 10
1.5.2 字符串连接12
1.5.3 变量和字面量12
1.6 理解标识符 13
1.7 检查变量类型 14
1.7.1 PHP的数据类型 14
1.7.2 类型强度 14
1.7.3 类型转换 15
1.7.4 可变变量 15
1.8 声明和使用常量 16
1.9 理解变量作用域 16
1.10 使用操作符 17
1.10.1 算术操作符 18
1.10.2 字符串操作符18
1.10.3 赋值操作符 19
1.10.4 比较操作符 21
1.10.5 逻辑操作符 22
1.10.6 位操作符 22
1.10.7 其他操作符 23
1.11 计算表单总金额 25
1.12 理解操作符优先级和结合性 26
1.13 使用变量处理函数27
1.13.1 测试和设置变量类型 27
1.13.2 测试变量状态 28
1.13.3 变量的重解释 29
1.14 根据条件进行决策 29
1.14.1 if语句 29
1.14.2 代码块 30
1.14.3 else语句 30
1.14.4 elseif语句 31
1.14.5 switch语句 32
1.14.6 比较不同条件 33
1.15 通过迭代实现重复动作 34
1.15.1 while循环 35
1.15.2 for循环和foreach循环 36
1.15.3 do...while循环 37
1.16 从控制结构或脚本中跳出 38
1.17 使用其他控制结构语法 38
1.18 使用declare 39
1.19 下一章 39
第2章 数据存储和读取40
2.1 保存数据以便后期使用 40
2.2 存储和获取Bob的订单 41
2.3 文件处理 41
2.4 打开文件 42
2.4.1 选择文件模式 42
2.4.2 使用fopen()打开文件 42
2.4.3 通过FTP或HTTP打开文件 44
2.4.4 解决打开文件时可能遇到的问题 45
2.5 写文件 47
2.5.1 fwrite()的参数 47
2.5.2 文件格式 47
2.6 关闭文件 48
2.7 读文件 50
2.7.1 以只读模式打开文件:fopen()51
2.7.2 知道何时读完文件:feof()51
2.7.3 每次读取一行数据:fgets()、fgetss()和fgetcsv() 52
2.7.4 读取整个文件:readfile()、fpassthru()、file()以及file_get_contents()53
2.7.5 读取一个字符:fgetc() 53
2.7.6 读取任意长度:fread()54
2.8 使用其他文件函数 54
2.8.1 查看文件是否存在:file_exists() 54
2.8.2 确定文件大小:filesize() 55
2.8.3 删除一个文件:unlink()55
2.8.4 在文件中定位:rewind()、fseek()和ftell() 55
2.9 文件锁定 56
2.10 更好的方式:数据库管理系统 57
2.10.1 使用普通文件的几个问题 58
2.10.2 RDBMS是如何解决这些问题的 58
2.11 进一步学习 59
2.12 下一章 59
第3章 使用数组60
3.1 什么是数组 60
3.2 数字索引数组 61
3.2.1 数字索引数组的初始化 61
3.2.2 访问数组内容 62
3.2.3 使用循环访问数组 63
3.3 使用不同索引的数组 64
3.3.1 初始化数组 64
3.3.2 访问数组元素 64
3.3.3 使用循环语句 64
3.4 数组操作符 66
3.5 多维数组 66
3.6 数组排序 69
3.6.1 使用sort()函数 69
3.6.2 使用asort()函数和ksort()函数对数组排序 70
3.6.3 反向排序 70
3.7 多维数组排序 70
3.7.1 使用array_multisort()函数71
3.7.2 用户定义排序 71
3.7.3 自定义排序函数的反序 73
3.8 对数组进行重新排序 73
3.8.1 使用shuffle()函数 73
3.8.2 逆序数组内容75
3.9 从文件载入数组 75
3.10 执行其他数组操作 79
3.10.1 在数组中浏览:each()、current()、reset()、end()、next()、pos()和prev()79
3.10.2 对数组每一个元素应用函数:array_walk() 80
3.10.3 统计数组元素个数:count()、sizeof()和array_count_values() 81
3.10.4 将数组转换成标量变量:extract() 81
3.11 进一步学习 83
3.12 下一章 83
第4章 字符串操作与正则表达式84
4.1 创建一个示例应用:智能表单邮件 84
4.2 字符串的格式化86
4.2.1 字符串截断:chop()、ltrim()和trim() 87
4.2.2 格式化字符串以便输出 87
4.3 使用字符串函数连接和分割字符串93
4.3.1 使用函数explode()、implode()和join() 93
4.3.2 使用strtok()函数 94
4.3.3 使用substr()函数 95
4.4 字符串比较 96
4.4.1 字符串的排序:strcmp()、strcasecmp()和strnatcmp() 96
4.4.2 使用strlen()函数判断字符串长度 96
4.5 使用字符串函数匹配和替换子字符串 97
4.5.1 在字符串中查找字符串:strstr()、strchr()、strrchr()和stristr() 97
4.5.2 查找子字符串的位置:strpos()和strrpos() 98
4.5.3 替换子字符串:str_replace()和substr_replace() 99
4.6 正则表达式的介绍 100
4.6.1 基础知识 100
4.6.2 分隔符101
4.6.3 字符类和类型 101
4.6.4 重复 102
4.6.5 子表达式 102
4.6.6 子表达式计数 103
4.6.7 定位到字符串的开始或末尾 103
4.6.8 分支103
4.6.9 匹配特殊字符 103
4.6.10 元字符一览 104
4.6.11 转义序列104
4.6.12 回溯引用105
4.6.13 断言105
4.6.14 在智能表单中应用 106
4.7 用正则表达式查找子字符串 107
4.8 用正则表达式替换子字符串 107
4.9 使用正则表达式分割字符串 108
4.10 进一步学习 109
4.11 下一章 109
第5章 代码重用与函数编写110
5.1 代码重用的好处 110
5.1.1 成本111
5.1.2 可靠性 111
5.1.3 一致性 111
5.2 使用require()和include()函数 111
5.2.1 使用require()函数引入代码112
5.2.2 使用require()制作Web站点模板113
5.2.3 使用auto_prepend_file和 auto_append_file 118
5.3 使用PHP函数 119
5.3.1 调用函数 119
5.3.2 调用未定义函数 120
5.3.3 理解大小写和函数名称121
5.4 自定义函数121
5.5 了解函数基本结构 122
5.6 参数使用 123
5.7 理解作用域126
5.8 引用传递和值传递128
5.9 使用return关键字 129
5.10 递归实现 131
5.11 进一步学习 134
5.12 下一章 134
第6章 面向对象特性135
6.1 理解面向对象概念 135
6.1.1 类和对象 136
6.1.2 多态性 137
6.1.3 继承 137
6.2 在PHP中创建类、属性和操作 138
6.2.1 类结构 138
6.2.2 构造函数 138
6.2.3 析构函数139
6.3 类的实例化139
6.4 使用类属性 140
6.5 调用类操作141
6.6 使用private和public关键字控制访问 141
6.7 编写访问器函数142
6.8 在PHP中实现继承 143
6.8.1 通过继承使用private和protected控制可见性 144
6.8.2 覆盖145
6.8.3 使用final关键字禁止继承和覆盖 147
6.8.4 理解多重继承 147
6.8.5 实现接口 148
6.9 使用Trait149
6.10 类设计 151
6.11 编写自定义类代码 151
6.12 理解PHP面向对象高级功能 158
6.12.1 使用类级别常量 159
6.12.2 实现静态方法 159
6.12.3 检查类类型和类型提示 159
6.12.4 延迟静态绑定160
6.12.5 对象克隆 161
6.12.6 使用抽象类 161
6.12.7 使用__call()重载方法 162
6.12.8 使用__autoload()方法 163
6.12.9 实现迭代器和迭代 163
6.12.10 生成器165
6.12.11 将类转换成字符串 166
6.12.12 使用反射API 166
6.12.13 名称空间168
6.12.14 使用子名称空间169
6.12.15 理解全局名称空间169
6.12.16 名称空间的导入和别名170
6.13 下一章 170
第7章 错误和异常处理 171
7.1 异常处理的概念 171
7.2 Exception类173
7.3 用户自定义异常 174
7.4 Bob汽车零部件商店应用的异常 176
7.5 异常和PHP的其他错误处理机制 179
7.6 进一步学习 180
7.7 下一章 180
第二篇 使用MySQL
第8章 Web数据库设计182
8.1 关系型数据库的概念 183
8.1.1 表183
8.1.2 列183
8.1.3 行183
8.1.4 值184
8.1.5 键184
8.1.6 模式185
8.1.7 关系185
8.2 设计Web数据库185
8.2.1 考虑真实建模对象186
8.2.2 避免保存冗余数据187
8.2.3 使用原子列值188
8.2.4 选择有意义的键188
8.2.5 思考需要从数据库获得的数据189
8.2.6 避免多个空属性的设计189
8.2.7 表类型总结190
8.3 Web数据库架构190
8.4 进一步学习191
8.5 下一章191
第9章 Web数据库创建192
9.1 使用MySQL监视程序193
9.2 登录MySQL194
9.3 创建数据库和用户195
9.4 设置用户与权限195
9.5 MySQL权限系统介绍196
9.5.1 最少权限原则196
9.5.2 创建用户和设置权限:CREATEUSER和GRANT命令196
9.5.3 权限的类型和级别198
9.5.4 REVOKE命令200
9.5.5 使用GRANT和REVOKE示例200
9.6 设置Web用户201
9.7 使用正确的数据库202
9.8 创建数据库表202
9.8.1 理解其他关键字204
9.8.2 理解列类型205
9.8.3 使用SHOW和DESCRIBE来查看数据库207
9.8.4 创建索引207
9.9 理解MySQL标识符208
9.10 选择列数据类型209
9.10.1 数字类型210
9.10.2 日期和时间类型211
9.10.3 字符串类型212
9.11 进一步学习213
9.12 下一章213
第10章 使用MySQL数据库214
10.1 什么是SQL214
10.2 在数据库中插入数据215
10.3 从数据库读取数据217
10.3.1 读取满足特定条件的数据218
10.3.2 多表数据读取220
10.3.3 以特定顺序读取数据224
10.3.4 数据分组和聚合225
10.3.5 选择要返回的数据行227
10.3.6 使用子查询227
10.4 更新数据库记录229
10.5 创建后修改表230
10.6 删除数据库记录232
10.7 删除表233
10.8 删除数据库233
10.9 进一步学习233
10.10 下一章233
第11章 使用PHP从Web访问MySQL数据库234
11.1 Web数据库架构及工作原理234
11.2 从Web查询数据库238
11.2.1 检查并过滤输入数据238
11.2.2 设置连接239
11.2.3 选择要使用的数据库240
11.2.4 查询数据库240
11.2.5 使用prepared statement241
11.2.6 读取查询结果242
11.2.7 断开数据库连接243
11.3 向数据库写入数据243
11.4 使用其他PHP与数据库交互接口247
11.5 进一步学习250
11.6 下一章250
第12章 MySQL高级管理251
12.1 深入理解权限系统251
12.1.1 user表253
12.1.2 db表254
12.1.3 tables_priv、columns_priv、procs_priv以及proxies_priv表254
12.1.4 访问控制:MySQL如何使用Grant表256
12.1.5 更新权限:更新结果何时生效256
12.2 提升MySQL数据库安全257
12.2.1 从操作系统视角看MySQL257
12.2.2 密码257
12.2.3 用户权限258
12.2.4 Web问题258
12.3 获取数据库的更多信息259
12.3.1 使用SHOW获取信息259
12.3.2 使用DESCRIBE获取列信息261
12.3.3 使用EXPLAIN了解查询的执行过程261
12.4 优化数据库265
12.4.1 设计优化265
12.4.2 权限265
12.4.3 表优化265
12.4.4 使用索引266
12.4.5 使用默认值266
12.4.6 其他技巧266
12.5 MySQL数据库备份266
12.6 MySQL数据库恢复267
12.7 实现复制267
12.7.1 设置主服务器268
12.7.2 执行初始数据传输268
12.7.3 设置从服务器269
12.8 进一步学习269
12.9 下一章269
第13章 MySQL高级编程270
13.1 LOAD DATA INFILE语句270
13.2 存储引擎271
13.3 事务272
13.3.1 理解事务定义272
13.3.2 使用InnoDB 事务272
13.4 外键273
13.5 存储过程274
13.5.1 基础示例274
13.5.2 本地变量277
13.5.3 游标和控制结构278
13.6 触发器281
13.7 进一步学习283
13.8 下一章283
第三篇 Web应用安全性
第14章 Web应用安全风险286
14.1 识别面临的安全威胁286
14.1.1 访问敏感数据286
14.1.2 数据篡改288
14.1.3 数据丢失或破坏289
14.1.4 拒绝服务289
14.1.5 恶意代码注入291
14.1.6 被攻破服务器291
14.1.7 否认292
14.2 了解对手292
14.2.1 攻击者和破解者292
14.2.2 受影响机器的无意识用户293
14.2.3 不满的员工293
14.2.4 硬件窃贼293
14.2.5 我们自己293
14.3 下一章293
第15章 构建安全的Web应用294
15.1 安全策略294
15.1.1 从正确心态开始295
15.1.2 安全性和可用性之间的平衡295
15.1.3 安全监控295
15.1.4 基本方法296
15.2 代码安全296
15.2.1 过滤用户输入296
15.2.2 转义输出300
15.2.3 代码组织结构302
15.2.4 代码自身问题303
15.2.5 文件系统因素303
15.2.6 代码稳定性和缺陷304
15.2.7 执行命令305
15.3 Web服务器和PHP的安全306
15.3.1 保持软件更新306
15.3.2 查看php.ini文件307
15.3.3 Web服务器配置307
15.3.4 Web应用共享主机托管服务308
15.4 数据库服务器的安全308
15.4.1 用户和权限系统308
15.4.2 发送数据至服务器309
15.4.3 连接服务器309
15.4.4 运行服务器310
15.5 保护网络310
15.5.1 防火墙310
15.5.2 使用隔离区311
15.5.3 应对DoS和DDoS攻击311
15.6 计算机和操作系统的安全312
15.6.1 保持操作系统更新312
15.6.2 只运行必需的软件312
15.6.3 服务器的物理安全312
15.7 灾难计划313
15.8 下一章313
第16章 使用PHP实现身份验证方法314
16.1 识别访问者314
16.2 实现访问控制315
16.2.1 保存密码317
16.2.2 加密密码318
16.2.3 保护多页面319
16.3 使用基本认证320
16.4 在PHP中使用基本认证320
16.5 使用Apache的.htaccess基本认证321
16.6 创建自定义认证324
16.7 进一步学习325
16.8 下一章325
第四篇 PHP高级编程技术
第17章 与文件系统和服务器交互328
17.1 上传文件328
17.1.1 文件上传的HTML329
17.1.2 编写处理文件的PHP脚本330
17.1.3 会话上传进度334
17.1.4 避免常见上传问题335
17.2 使用目录函数336
17.2.1 从目录读入336
17.2.2 获取当前目录信息340
17.2.3 创建和删除目录340
17.3 与文件系统交互341
17.3.1 获取文件信息341
17.3.2 修改文件属性343
17.3.3 创建、删除和移动文件344
17.4 使用程序执行函数344
17.5 与环境交互:getenv()和putenv()347
17.6 进一步学习347
17.7 下一章347
第18章 使用网络和协议函数348
18.1 了解可用协议348
18.2 发送和读取邮件349
18.3 使用其他站点数据349
18.4 使用网络查询函数352
18.5 备份或镜像文件355
18.5.1 使用FTP备份或镜像文件356
18.5.2 上传文件362
18.5.3 避免超时362
18.5.4 使用其他FTP函数362
18.6 进一步学习363
18.7 下一章363
第19章 管理日期和时间364
19.1 在PHP中获得日期和时间364
19.1.1 理解时区364
19.1.2 使用date()函数365
19.1.3 处理UNIX时间戳366
19.1.4 使用getdate()函数368
19.1.5 使用checkdate()函数验证日期369
19.1.6 格式化时间戳369
19.2 PHP和MySQL的日期格式互转371
19.3 在PHP中计算日期372
19.4 在MySQL中计算日期373
19.5 使用微秒374
19.6 使用日历函数375
19.7 进一步学习375
19.8 下一章376
第20章 国际化与本地化377
20.1 本地化不只是翻译377
20.2 理解字符集378
20.2.1 字符集的安全风险379
20.2.2 使用PHP多字节字符串函数379
20.3 创建可本地化页面基础结构380
20.4 在国际化应用中使用gettext()函数383
20.4.1 配置系统使用gettext()383
20.4.2 创建翻译文件384
20.4.3 使用gettext()在PHP中实现本地化内容385
20.5 进一步学习386
20.6 下一章386
第21章 生成图像387
21.1 设置PHP图像支持387
21.2 理解图像格式388
21.2.1 JPEG388
21.2.2 PNG388
21.2.3 GIF389
21.3 创建图像389
21.3.1 创建画布图像390
21.3.2 在图像上绘制或打印文本390
21.3.3 最终图形输出392
21.3.4 清理393
21.4 在其他页面中使用自动创建的图像393
21.5 使用文本和字体创建图像394
21.5.1 设置基础画布397
21.5.2 调整按钮文本大小398
21.5.3 文本定位400
21.5.4 在按钮上写入文本401
21.5.5 完成401
21.6 绘制图形图像数据401
21.7 使用其他图像函数409
21.8 下一章409
第22章 使用PHP会话控制410
22.1 什么是会话控制410
22.2 理解基本会话功能410
22.2.1 什么是cookie411
22.2.2 通过PHP设置cookie411
22.2.3 在会话中使用cookie412
22.2.4 保存会话ID412
22.3 实现简单会话412
22.3.1 启动会话413
22.3.2 注册会话变量413
22.3.3 使用会话变量413
22.3.4 销毁变量和会话414
22.4 创建简单会话示例414
22.5 配置会话控制416
22.6 使用会话控制实现身份验证417
22.7 下一章423
第23章 JavaScript与PHP集成424
23.1理解AJAX424
23.2 jQuery概述425
23.3 在Web应用中使用jQuery425
23.4 在PHP中使用jQuery和AJAX434
23.4.1 支持AJAX的聊天脚本/服务器434
23.4.2 jQuery AJAX方法437
23.4.3 聊天客户端/jQuery应用439
23.5 进一步学习445
23.6 下一章445
第24章 PHP的其他有用特性446
24.1 字符串计算函数:eval()446
24.2 终止执行:die()和exit()447
24.3 序列化变量和对象448
24.4 获取PHP环境信息448
24.4.1 找到已载入的扩展449
24.4.2 识别脚本属主450
24.4.3 获知脚本被修改时间450
24.5 临时修改运行时环境450
24.6 高亮源代码451
24.7 在命令行上使用PHP452
24.8 下一章453
第五篇 构建实用的PHP和MySQL项目
第25章 在大型项目中使用PHP和MySQL456
25.1 在Web开发中应用软件工程技术457
25.2 规划和运营Web应用项目457
25.3 代码重用458
25.4 编写可维护代码458
25.4.1 代码标准459
25.4.2 代码分解461
25.4.3 使用标准目录结构462
25.4.4 文档化和共享内部函数462
25.5 实现版本控制462
25.6 选择开发环境463
25.7 项目文档化463
25.8 原型定义464
25.9 隔离逻辑和内容464
25.10 代码优化465
25.11 测试466
25.12 进一步学习466
25.13 下一章467
第26章 调试和日志468
26.1 编程错误468
26.1.1 语法错误468
26.1.2 运行时错误469
26.1.3 逻辑错误474
26.2 变量调试辅助475
26.3 错误报告级别477
26.4 修改错误报告设置478
26.5 触发自定义错误479
26.6 错误日志记录480
26.7 错误日志文件482
26.8 下一章483
第27章 构建用户身份验证和个性化484
27.1 解决方案组件484
27.1.1 用户识别和个性化485
27.1.2 保存书签485
27.1.3 推荐书签485
27.2 解决方案概述486
27.3 实现数据库487
27.4 实现基本网站488
27.5 实现用户身份验证491
27.5.1 用户注册491
27.5.2 登录496
27.5.3 退出500
27.5.4 修改密码501
27.5.5 重设密码502
27.6 实现书签存储和读取507
27.6.1 添加书签507
27.6.2 显示书签509
27.6.3 删除书签510
27.7 实现书签推荐513
27.8 考虑可能的扩展516
第28章 使用Laravel构建基于Web的电子邮件客户端(第一部分)517
28.1 Laravel 5介绍517
28.1.1 创建Laravel新项目517
28.1.2 Laravel应用结构518
28.1.3 Laravel请求周期与MVC模式519
28.1.4 理解Laravel模型、视图和控制器类520
第29章 使用Laravel构建基于Web的电子邮件客户端(第二部分) 536
29.1 使用Laravel构建简单的IMAP客户端536
29.1.1 PHP IMAP函数536
29.1.2 为Laravel应用封装IMAP544
29.2 创建基于Web的电子邮件客户端561
29.2.1 实现ImapServiceProvider562
29.2.2 Web客户端认证页面563
29.2.3 实现主视图567
29.2.4 实现删除和发送邮件576
29.3 小结581
第30章 社交媒体集成分享以及验证582
30.1 OAuth:Web服务认证582
30.1.1 认证码授权583
30.1.2 隐式授权584
30.1.3 创建Instagram Web客户端585
30.1.4 Instagram的点赞照片功能593
30.2 小结594
第31章 构建购物车595
31.1 解决方案组件595
31.1.1 构建在线类目596
31.1.2 记录用户希望购买的商品596
31.1.3 实现支付系统596
31.1.4 构建管理界面597
31.2 解决方案概述597
31.3 实现数据库599
31.4 实现在线类目601
31.4.1 类目列表603
31.4.2 类目图书清单605
31.4.3 显示图书详情607
31.5 实现购物车608
31.5.1 使用show_cart.php脚本609
31.5.2 查看购物车612
31.5.3 向购物车中添加商品614
31.5.4 保存更新的购物车615
31.5.5 打印标题栏总结信息616
31.5.6 结账617
31.6 实现支付622
31.7 实现管理界面624
31.8 扩展项目631
附录A 安装Apache、PHP和MySQL632

教学资源推荐
作者: Y. Daniel Liang
作者: 秦维佳 侯春光 孟艳红 伞宏力
作者: Charles N.Fischer, Richard J.LeBlanc,Jr.
作者: Y. Daniel Liang
参考读物推荐
作者: James Gosling, Bill Joy, Guy Steele, Gilad Bracha
作者: 徐涛 著
作者: (美)Bud E. Smith; Michael McCallister 著
作者: [美]程润伟(John Cheng) 马克斯?格罗斯曼(Max Grossman) 泰•麦克切尔(Ty McKercher) 著