PHP是什么——
我为什么要关注它
关于PHP,大多数人首先想要知道的问题之一就是这个首字母缩写词代表什么。而当他们知道了之后,一定会觉得它非常枯燥无趣。正式的说法是,PHP表示PHP: Hypertext Preprocessor(超文本预处��语言)。这是一个晦涩的名字,它给人留下的印象是专门供那些极客使用的。但这绝不是事实。
PHP是一种脚本语言,它通过以下方式为网站注入动态特性:
? 直接将反馈从网站发送到邮箱中;
? 通过网页上传文件;
? 从较大的图像生成缩略图;
? 读写文件;
? 动态地显示和更新信息;
? 使用数据库显示和存储信息;
? 使网站支持搜索。
通过阅读本书,你将能实现所有这些功能。PHP很容易学习;它与平台无关,因此相同的代码可以在Windows、Mac OS X和Linux上运行。而且在PHP开发中需要用到的所有软件都是开源的,因此可以免费使用。几年以前,在PHP General邮件列表(http://news.php.net/php.general)上出现了一次有趣的讨论,是关于改变PHP缩写词的含义的。这些提议中包括Positively Happy People(积极快乐的人)和Pretty Happy Programmers(快乐的程序员)。本书的目的就在于帮助你实际运用PHP——并且在这个过程中理解是什么使得PHP程序员如此快乐。
本章将介绍以下内容:
? PHP如何发展成为动态网站中应用*广泛的技术;
? PHP如何实现动态网页;
? 学习PHP有多难,或多简单;
? PHP是否**;
? 你需要什么软件来编写PHP。
1.1 PHP的发展史
尽管PHP如今已成为使用得*广泛的动态网站创建技术,但在1995年刚出现的时候,它的野心不是特别大,而且名字也与现在不同。它*初名为Personal Home Page Tools(个人主页工具,PHP工具),它的目标之一就是通过一个在线表单收集信息并将其显示在网页上,来创建一个留言簿。不久之后,又增加了与数据库通信的功能。1998年推出PHP 3时,人们决定将Personal Home Page从它的名字中去除,因为它听起来像是为业余爱好者设计的,无法准确反映它增加的各种复杂的特征。PHP 3被形容为“一种对程序员非常友好的脚本语言,适合只有极少或没有编程经验的人以及经验丰富但需要快速完成任务的Web开发人员使用。”
从那时开始,PHP又有了进一步的发展,PHP 5中为面向对象编程(OOP)增加了大量的支持。不过PHP的巨大吸引力之一仍然在于它保持了*初的本色。你不需要学习许多理论就能够开始编写有用的脚本,同时也能相信这门技术能开发出具有行业水准的应用程序。PHP推动了一些十分流行的内容管理系统(CMC)的发展,例如Drupal(http://drupal.org/)、Joomla!(www. joomla.org)和WordPress(http://wordpress.org/)。一些非常流行的网站,包括Facebook(www.facebook.com)和Wikipedia(www.wikipedia.org),也使用了PHP。
从庞大的用户群、广泛受支持和大量**特性这些意义上讲,PHP如今被认为是一种成熟的技术。新的特性还在不断增加,尽管只有那些**用户才对它们感兴趣。
在写作本书时,*新的版本是PHP 5.3。当意识到*初的目标定得过高时,PHP 6的开发在2010年年初的时候就被无限期地搁置了。
本书的**在于现在可以使用的代码,而不是未来某个不确定的时间将会使用的代码。我们还注意避免使用已经被弃用的功能——换句话说,那些被标记为从下一个PHP的主版本中删除的功能。
1.2 PHP是如何使页面实现动态效果的
PHP*初是被设计成嵌入网页的HTML中的,这也是它仍被经常使用的方式。例如,如果你想要把当前年份显示到一个版权声明中,可以把以下代码加入页脚中:
<p>© <?php echo date('Y'); ? >PHP Solutions</p>
在一个支持PHP的Web服务器中,<?php和? >标记之中的代码是自动处理的,并且像下面这样显示年份:
这只是一个简单的例子,但是它说明了使用PHP的一些好处。
? 你可以不必担心需要更新版权声明,尽情地享受新年派对吧。任何在午夜来临之后访问你的网站的人都会看到正确的年份。
? 与使用JavaScript显示日期不同,这个过程是在Web服务器上完成的,所以它并不依赖于用户的浏览器是否启用JavaScript。
? 日期是由Web服务器计算出来的,因此如果用户电脑上的时间设置错误的话它也不会受到影响。
尽管像这样将PHP代码嵌入HTML中很方便,但这通常会导致重复输入相同的代码,这很麻烦而且会导致错误。还会使得网页难于维护,尤其是当你开始使用更加复杂的PHP代码时。因此,通常的做法是将许多动态的代码储存在独立的文件中,并且使用PHP通过这些不同组件来生成页面。这些独立的文件,或通常称为包含文件(include file),可以只包含PHP,或只包含HTML,或是这两种都包含。
开始时可能很难适应这种操作方式,但是它的效率要高得多。举一个简单的例子,你可以将网站的导航菜单放入一个包含文件中,并且使用PHP使其包含在每个页面中。但凡需要对这个菜单进行任何修改时,你都只需编辑一个文件——包含文件,所做的修改就会自动地体现在每一个包含这个菜单的页面中。想象一下在一个由数十个页面组成的网站中,这将会节省多少时间。
在普通的HTML页面中,Web开发人员在设计时就将内容固定在页面中并且上传到Web服务器上。当有人访问这个页面时,Web服务器只是发送这个HTML和其他相关内容,如图像和样式表。这是一种简单的事务——请求来自于浏览器,固定的内容由服务器发送回来。当你使用PHP创建网页时,还有许多其他的过程。图1-1显示了都发生了什么。
图1-1 Web服务器动态地生成每个PHP页面来响应请求
访问用PHP构建的网站时,它会启动以下事件序列。
(1) 浏览器向Web服务器发送一个请求。
(2) Web服务器将请求提交给嵌入到服务器中的PHP引擎。
(3) PHP引擎处理代码。在许多情况下,在生成页面之前可能还会查询数据库。
(4) 服务器将完成的页面传回给浏览器。
这个过程通常只需要零点零几秒,因此PHP网站的访问者感觉不到任何的延迟。由于每个页面都是单独生成的,PHP页面可以响应用户输入,当用户登录时显示不同的内容或显示出数据库搜索的结果。
创建能够独立思考的页面
PHP是一种服务器端语言(server-side language)。PHP代码保留在Web服务器上。在处理完成后,服务器只发送脚本的输出。通常这是HTML,但是PHP也可以用于生成其他的Web语言,如XML(Extensible Markup Language,可扩展标记语言)。
PHP允许我们将逻辑引入网页中。这种逻辑来源有两种。其中一些决策是基于PHP从服务器收集的信息:日期、时间、星期几、页面的URL中的信息,等等。如果是星期三,就显示星期三的电视节目表。其他时候,决策则是基于PHP从在线表单中提取的用户输入。如果你在网站上注册,则显示你的个人信息,等等。
结果,可以通过一个脚本来创建无数种输出。例如,如果你访问我的博客http://foundation- php.com/blog/(如图1-2所示),并且单击各种内部链接,你看到的通常是显示不同内容的同一个页面。诚然,我往往总是写一些相同类型的主题,但这是我的错误,而不是PHP的。
图1-2 博客是*适合使用PHP的站点
1.3 使用和学习PHP有多难
PHP不是什么复杂高深的技术,但同时,你也不要期望能够在5分钟之内就成为专家。对于新手来说,*大的不适应可能就是PHP的容错度比浏览器对HTML的容错度要低得多。在HTML中如果漏掉了一个结束标签,大多数的浏览器仍然会显示该页面。在PHP中,如果你漏掉了一个结束引号、分号或大括号,将会像图1-3所显示的那样得到一条错误消息。这不仅仅是PHP的一个特性,所有的服务器端技术都是如此,包括ASP、ASP.NET和ColdFusion。
图1-3 像PHP这样的服务器端语言无法容忍大多数的编码错误
如果你是使用可视化设计工具(如Adobe Dreamweaver或Microsoft Expression Web)的网页设计人员或开发人员,并且从不留意基础代码,那么是时候该反思一下你的方法了。将PHP和结构差的HTML混合在一起有可能会导致一些问题。PHP利用循环来执行重复性任务,如显示数据库搜索的结果。一个循环(loop)重复同一段代码(代码通常同时包含PHP和HTML),直至所有的结果都显示出来。如果你将循环放到了错误的位置,或者HTML的结构差,那么页面就有可能像用纸牌搭的房子一样倒塌。如果你还不习惯这样做,使用W3C(World Wide Web Consortium)的Markup Validation Service(http://validator.w3.org/unicorn)来检查你的页面是一个不错的主意。
W3C是一个国际组织,它负责制定标准(如HTML和CSS),并制定保证Web长期发展的指导方针。它由World Wide Web的创立者Tim Berners-Lee所领导。要想了解W3C的使命,参见www.org/Consortium/mission。
1.3.1 是否可以只复制和粘贴代码
复制这本书中的代码没什么错,这正是它们存在的目的。复制是我们小时候都学习过的方法,但我们大多数人都会摆脱模仿的阶段,我们会提出问题并且开始亲自实验。我并不打算用一些对于网页没有直接价值的乏味的练习题来教你学习PHP,本书就是要让你可以直接将新获得的知识运用到实际项目中。同时,我会解释代码是用来做什么的以及它为什么出现在那里。即使不能准确地理解它的工作原理,你也会获得足够的知识来了解代码的哪个部分适合你的需要,哪个部分*好不要去理会。
PHP是一个提供了大量强大功能的工具箱。它拥有数千个内置函数,可以执行各种任务,如将文本转换成大写,从完整尺寸的图像生成缩略图,或连接到数据库。真正的强大之处在于将这些函数以不同的方式组合使用,并且添加进你自己的条件逻辑。为了从本书中学到更多内容,你需要用你在书中学到的工具进行实验,并且提出你自己的解决方案。
1.3.2 PHP的**性
PHP就像是你家中的电或菜刀:如果正确使用,它是非常**的;如果不负责任地操作,它就会造成许多伤害。本书第1版的灵感之一就来自2005年年末接二连三爆发的恶意攻击。这些攻击利用了电子邮件脚本的一个漏洞,将网站变成了垃圾邮件中继。没有几个人免遭危害。我当然也未能幸免,但是意识到这个问题以后,我修补了漏洞,并及时制止了这些恶意攻击。不过,每天都有人发送紧急的请求到在线论坛上以寻求帮助。即使被告知如何处理这种问题时,他们的回复甚至变得更加抓狂。许多人承认他们完全不了解他们在网站中使用的代码。有些人把创建网站当成一种业余爱好,这似乎是可以理解的,但是这些人中有许多都是替客户创建网站的“专业人士”。当这些客户们的邮箱开始充满垃圾邮件时,他们自然就会很不高兴。当主机托管公司由于无法忍受服务器上的不**脚本而将客户的域名禁用时,他们毫无疑问会更加不高兴。
这个故事的寓意不在于PHP是不**的;也不在于每个人都需要成为使用PHP的**专家。重要的是了解PHP**性的基本原则:在处理用户输入之前必须进行检查。你会发现这将成为贯穿本书始终的主题。只要付出很少的努力,大多数的**风险就能够被消除。
*令人担心的方面可能是在这个问题被**揭示出来五年多之后,我仍然能看到许多人在使用不**的邮件脚本。保护自己的*佳方法就是了解你正在使用的代码。即使你不能自己解决问题,也可以实施由脚本的编写者或其他专家建议的补救措施。
1.4 用什么软件来编写PHP
严格来讲,你不需要任何特殊的软件来编写PHP脚本。PHP代码是纯文本,可以在任何文本编辑器中创建,如Windows中的记事本或Mac OS X中的TextEdit。尽管如此,使用纯文本编辑器,你仍需要做好应付各种麻烦的准备。你当前的Web开发程序可能已经支持PHP。如果不支持,有许多程序可供选择,有收费的也有免费的,它们都设计了加速开发过程的功能。
选择PHP编辑器应注意的几个方面
如果代码中出现错误,页面可能永远不会像浏览器那样还会呈现出来,你所能看到的只有一条错误消息。你应该选择一个具有下述功能的脚本编辑器。
? PHP语法检查:过去仅能在昂贵的专用程序中看到该功能,但是现在它已经成为一些免费程序中的一个功能。语法检查器在你输入时对代码进行监视并高亮显示错误,这节省了大量的时间并避免了很多麻烦。
? PHP语法着色:根据代码作用的不同,以不同的颜色来高亮显示它们。如果代码显示的颜色不正确,这就是一个明确的信号,提示你出错了。
? PHP代码提示:PHP有如此多的内置函数,即使经验丰富的用户要想记住如何使用它们也是很困难的。许多脚本编辑器自动显示工具提示来提醒一段特殊代码是如何工作的。
? 行编号:迅速地找到某一行会使得排错更简单。
? 自动匹配括号功能:圆括号(())、方括号([ ])和花括号({})必须总是成对出现。我们很容易忘记结束括号。所有**的脚本编辑器都能够帮助找到配对的括号、中括号或大括号。
下面的部分介绍了一些可以选择的脚本编辑器。它并不是一份详尽的清单,而只是根据我个人的经验加以介绍。
1. 带有PHP支持的通用Web开发工具
用于创建网站的两个应用*广泛的集成开发环境(IDE)Adobe Dreamweaver (www.adobe. com/products/dreamweaver/)和Microsoft Expression Web(www.microsoft.com expression/produts/ web_overview.aspx)具有对PHP的内置支持。
? Dreamweaver CS5:Dreamweaver是一个**的符合标准的可视化编辑器。Dreamweaver CS5实现了一个全新水平的PHP支持,添加了语法检查、嵌入式文档(附有示例)和变量的自动完成。尤其有用的是能够在编辑PHP包含文件的同时使主页在工作区中可见(参见图1-4)。
图1-4 Dreamweaver CS5支持编辑PHP包含文件的同时在Live View中查看结果
? Expression Web: Expression Web 2、3、4版本中的PHP支持水平类似于Dreamweaver旧版本中提供的支持水平——换句话说,即PHP核心功能中的语法着色、代码提示和行编号。在编写本书时,它还有一个重大缺陷:尚不支持语法检查的功能。
2. 专用的脚本编辑器
即使你不打算进行大量的PHP开发,也应该考虑使用一个专用的脚本编辑器(如果你的Web开发IDE不支持语法检查的话)。下述这些专用的脚本编辑器具备所有的必要功能,如语法检查和代码提示。它们还支持HTML和CSS,但是缺少Dreamweaver或Expression Web所提供的可视化显示。
? Zend Studio(www.zend.com/en/products/studio/):如果你真正把PHP开发看得十分重要,那么可以使用Zend Studio。Zend Studio是面向PHP功能*全面的IDE。它是由Zend公司创建的,这是一家由PHP开发的主要贡献者所经营的公司。Zend Studio可以在Windows、Mac OS X和Linux上运行。它的主要缺点就是成本,尽管这个价格包括12个月的免费升级和支持。
? PhpED(www.nusphere.com/products/phped.htm):提供三个可用的版本。作为一个初学者来说,花费*低的版本就拥有你需要的所有功能。如果你以后需要更加**的功能,可以升级到其他版本。PhpED只能在Windows上运行。
? PHP Development Tools(www.eclipse.org/pdt/):PDT实际上是Zend Studio的一个精简版,它的优势是免费。缺点是在写作本书的时候,几乎没有文档。它在Eclipse中运行,Eclipse是一个支持多种计算机语言的开源IDE。如果你已经在Eclipse中使用过其他语言,会发现它相对较容易使用。PDT在Windows、Mac OS X和Linux上运行,它既可以作为一个Eclipse插件也可以作为一个自动安装Eclipse和PDT插件的完整安装包。
? Komodo Edit(www.activestate.com/komodo-edit):这是用于PHP和许多其他流行计算机语言的一个免费、开源的IDE。它可以在Windows、Mac OS X和Linux中使用。它是Komodo IDE的一个精简版,Komodo IDE是一个拥有更**功能的付费程序。Komodo IDE的免费**版有独立的下载链接,该版本是有时间限制的,而Komodo Edit是没有时限的。
1.5 继续学习
本章仅简要介绍了PHP在为你的网站增添动态功能方面能够做些什么,以及你需要什么软件。使用PHP的**个阶段就是要建立一个测试环境。下一章将介绍在Windows和Mac OS X上建立测试环境的过程。