For faster navigation, this Iframe is preloading the Wikiwand page for PHP.

PHP

维基百科,自由的百科全书

本条目存在以下问题,请协助改善本条目或在讨论页针对议题发表看法。 此条目可参照英语维基百科相应条目来扩充,此条目在对应语言版为高品质条目。 (2021年10月13日)若您熟悉来源语言和主题,请协助参考外语维基百科扩充条目。请勿直接提交机械翻译,也不要翻译不可靠、低品质内容。依版权协议,译文需在编辑摘要注明来源,或于讨论页顶部标记((Translated page))标签。
PHP
PHP-logo.svg
编程范型面向对象指令式编程
设计者拉斯姆斯·勒多夫
实现者The PHP Group
发行时间1995年,​27年前​(1995[1]
稳定版本
8.1.6[2]在维基数据编辑
( 2022年5月12日 )
类型系统动态、弱类型
操作系统跨平台
许可证PHP许可证
网站www.php.net 编辑维基数据链接
启发语言
PerlHTMLCC++JavaJavaScriptHack
影响语言
HackJSPASP

PHP(全称:PHP:Hypertext Preprocessor,即“PHP:超文本预处理器”)是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用。PHP的语法借鉴吸收C语言JavaPerl等流行计算机语言的特点,易于一般程序员学习。PHP的主要目标是允许网络开发人员快速编写动态页面,但PHP也被用于其他很多领域。[3]

PHP最初是由勒多夫在1995年开始开发的;现在PHP的标准由the PHP Group[4]维护。PHP以PHP License作为许可协议,不过因为这个协议限制了PHP名称的使用,所以和开放源代码许可协议GPL不兼容。[5]

PHP的应用范围相当广泛,尤其是在网页程序的开发上。一般来说PHP大多执行在网页服务器上,通过执行PHP代码来产生用户浏览的网页。PHP可以在多数的服务器和操作系统上执行。根据2013年4月的统计资料,PHP已经被安装在超过2亿4400万个网站和210万台服务器上[6]

PHP在Windows上有专门的官方移植编译项目,并且分多个VC编译器版本和线程安全特性来提供不同的版本支持。

根据W3Techs的报告,截至2021年9月:“有78.9%的网站使用PHP。”[7]

开发历史

Zend Technologies的创办人之一 - Andi Gutmans
Zend Technologies的创办人之一 - Andi Gutmans
Zend Technologies的创办人之一 - Zeev Suraski
Zend Technologies的创办人之一 - Zeev Suraski

PHP原本的简称为Personal Home Page[8],是拉斯姆斯·勒多夫为了要维护个人网页,而用C语言开发的一些CGI工具程序集,来取代原先使用的Perl程序。最初这些工具程序用来显示拉斯姆斯·勒多夫的个人履历,以及统计网页流量[9]。他将这些程序和一些窗体解释器集成起来,称为PHP/FI。PHP/FI可以和数据库连接,产生简单的动态网页程序。拉斯姆斯·勒多夫在1995年6月8日将PHP/FI公开发布,希望可以透过社群来加速程序开发与查找错误[10]。这个发布的版本命名为PHP 2,已经有今日PHP的一些雏型,像是类似Perl的变量命名方式、窗体处理功能、以及嵌入到HTML中执行的能力。程序语法上也类似Perl,有较多的限制,不过更简单、更有弹性。[9]

在1997年,任职于Technion IIT公司的两个以色列程序员:Zeev Suraski和Andi Gutmans,重写了PHP的语法分析器,成为PHP 3的基础,而PHP也在这个时候改称为PHP: Hypertext Preprocessor.[9]。经过几个月测试,开发团队在1997年11月发布了PHP/FI 2,随后就开始PHP 3的开放测试,最后在1998年6月正式发布PHP 3。Zeev Suraski和Andi Gutmans在PHP 3发布后开始改写PHP的核心,这个在1999年发布的语法分析器称为Zend Engine[11],他们也在以色列的Ramat Gan成立了Zend Technologies来管理PHP的开发。[9]

在2000年5月22日,以Zend Engine 1.0为基础的PHP 4正式发布,2004年7月13日则发布了PHP 5,PHP 5则使用了第二代的Zend Engine[9]。PHP 5包含了许多新特色,像是强化的面向对象功能、引入PDO(PHP Data Objects,一个访问数据库的延伸库)、以及许多性能上的增强[12]。目前PHP 4已经不会继续更新,以鼓励用户转移到PHP 5。[13][14]

2008年时,PHP 5成为了PHP唯一维护中的稳定版本。

PHP 7的首个版本于2015年12月3日开发完成,包含了大量性能上的改进,同时也带来了一些新特性,最值得注意的是返回值类型声明、标量类型声明(可用于参数及返回值)。

版本历程

代表意义
红色 过期版本;官方停止支持
黄色 当前版本;官方仅提供安全问题修复
绿色 当前版本;官方提供安全问题和一般问题的修复
蓝色 未来版本
版本 发布日期 结束支持日期[15] 说明
1.0 1995年6月8日 正式名称为"Personal Home Page Tools (PHP Tools)",第一次使用了"PHP"的名字。[9]
2.0 1996年4月16日 针对PHP 1.0的改进版,速度更快、体积更小,更容易产生动态网页。[9]
3.0 1998年6月6日 2000年10月20日 开发方式改成多人共同参与。Zeev Suraski和Andi Gutmans为了这个版本重写了剖析引擎。[9]
4.0 2000年5月22日 2001年6月23日 改成以Zend引擎作为语法分析器,具有两阶段剖析/标签剖析系统等先进功能。[16]
4.1 2001年12月10日 2002年3月2日 加入"超全局变量"(superglobals)功能,包含了$_GET$_POST$_SESSION等。[16]
4.2 2002年4月22日 2002年9月6日 默认取消register_globals功能。从网络接收的资料将不会设置成全局变量,增加程序安全性。[16]
4.3 2002年12月27日 2005年3月31日 加入命令行可执行文件,称为CLI,用以补充CGI[16][17]
4.4 2005年7月11日 2008年8月8日 新增phpizephp-config 的手册页。[16]
5.0 2004年7月13日 2005年9月5日 推出有着新的对象模型的Zend Engine II。[18]
5.1 2005年11月24日 2006年8月24日 在往重新设计的PHP引擎引入编译变量时做了性能提升。[18]添加了PHP数据对象(PDO)作为访问数据库的统一接口。[19]
5.2 2006年11月2日 2011年1月6日 默认开启"过滤"的扩展。[18]本地的JSON支持。[20]
5.3 2009年6月30日[21] 2014年8月14日 支持名字空间;使用XMLReader和XMLWriter增强XML支持;支持SOAP ,[22]延迟静态绑定,跳转标签(有限的goto), 闭包,Native PHP archives。
5.4 2012年3月1日 2015年9月3日 支持Trait、简短数组表达式。移除了register_globals, safe_mode, allow_call_time_pass_reference, session_register(), session_unregister(), magic_quotes以及session_is_registered()。加入了内建的Web服务器。[23]增强了性能,减小内存使用量。
5.5 2013年6月20日 2016年7月10日 支持generators,用于异常处理的finally ,将OpCache(基于 Zend Optimizer+)加入官方发布中。
5.6 2014年8月28日 2018年12月31日 支持常量标量表达式、可变参数函数、指数运算符,增加phpdbg SAPI、统一的默认字符集。[24]
6.x 未发布 不适用 取消掉的、从未正式发布的PHP版本。[25][26]
7.0 2015年12月3日[27] 2018年12月3日 Zend Engine 3 (性能提升[28]并在Windows上支持 64-bit 整数),统一的变量语法, 

基于抽象语法树编译过程。

7.1 2016年12月1日 2019年12月1日 void返回值类型,类常量可见性修饰符
7.2 2017年11月30日 2020年11月30日
7.3 2018年12月6日 2021年12月6日
7.4 2019年11月28日 2022年11月28日 属性添加限定类型、箭头函数、空合并运算符赋值、数组展开操作
8.0 2020年11月26日 2023年11月26日 JIT即时编译,增加命名参数,注解实现,构造器属性提升,联合类型,Match 表达式,Nullsafe 运算符,字符串与数字的比较更符合逻辑,内部函数类型错误的一致性。
8.1 2021年11月25日 2024年11月25日

吉祥物

吉祥物:elePHPant
吉祥物:elePHPant

PHP项目的吉祥物名叫“elePHPant”,PHP的logo在一头蓝象的里面,由文森·庞蒂尔(Vincent Pontier)[29]在1998年[30]设计。其设计概念是从侧面看 PHP 像只大象[31]。当elePHPant被制作成毛绒玩具时,有时颜色会有不同。

应用

网络应用开发
网络应用开发

PHP是一个应用范围很广的语言,特别是在网络程序开发方面。一般来说PHP大多在服务端执行,透过执行PHP的代码来产生网页提供浏览器读取,此外也可以用来开发命令行脚本程序和用户端的GUI应用程序。PHP可以在许多的不同种的服务器、操作系统、平台上执行,也可以和许多数据库系统结合。使用PHP不需要任何费用,官方组织PHP Group提供了完整的程序源代码,允许用户修改、编译、扩展来使用。[32]

安全

据National Vulnerability Database数据显示,与PHP有关的数据库攻击比例为:20% 2004, 28% 2005, 43% 2006, 36% 2007, 35% 2008 and 32% 2009[33]。其中很多的漏洞都可以通过远程操作完成,如:黑客可以通过网络连接攻击服务器,达到盗取或毁坏数据,发送垃圾邮件或进行分布式拒绝服务攻击。但是随着更多的关注,PHP也变得越来越安全了。

PHP官网被骇入事件

2010年12月17日,PHP代码“贡献者名单”中被加入“Wolegequ Gelivable”字样(中文含义“我勒个去 给力”),约半小时后被删除。[34][35][36]2011年3月19日,PHP官方发布声明[37]指出,黑客可能是通过wiki.php.net作为入口攻击了代码系统。并且,官方已经检查过自版本5.3.5以来发布的代码,并没有发现恶意内容。但官方同时表示,尚未完全掌握黑客发动本次攻击的具体细节。

语法

PHP的语法参考了PerlC语言,而且可以集成在HTML之中,以下是一个简单的Hello World代码:

 <?= 'Hello World!'; ?>

PHP剖析引擎只剖析<?php?>之间的代码,而不包含在<?php?>之间的内容则会直接提交,所以可以用以下的方式来将PHP代码嵌入在HTML之中:

 <?php
     //-PHP-{zh-hans:代码;zh-hant:程式碼:}-
 ?>
 html內容
 <?php
     //-PHP-{zh-hans:代码;zh-hant:程式碼:}-
 ?>

在HTML中嵌入PHP时,比如需要单独输出某个变量,除了正常采用 echo 方式外,也可以直接采用下列方式:

 <?=$title?>

但是上述这种方式曾经引起争议,有的人并不推荐这种方式的缩写[38](其原因为:并不是所有服务器都支持缩写,但在后期之后此选项为默认开启),也有人因为采用这种方法,造成与 XML 搞混[39]的情况。

在判断语句中的HTML代码并不会被直接提交:

 <?php
 if (false) {
 ?>
 HTML Code
 <?php
 }
 ?>

PHP可以用三种注解的形式:C与C++所使用的“/*...*/”与“//”,和Perl的“#”。

 <?php
 /* 多行註解的第一行
 多行註解的另一行 */

 // 單行註解

 # 單行註解
 ?>

类型

PHP主要有八种基本数据类型[40],其中包括:

变量

PHP中,变量以“$”后接变量名称来表示。 变量名称区分大小写。

有效的变量名称以字母或下划线开头,后接任意数目的字母、数字或下划线,PHP也支持使用多字节文字作为变量名。[41]

面向对象

PHP从PHP 3开始有了基本的面向对象(Object oriented)的特性,但直到PHP 5将面向对象部分重新改写之后,PHP的面向对象功能才比较完善。现在PHP可以说是一个有完整面向对象功能的语言。

PHP相关资源

PHP框架

使用PHP框架可以更快更简单的部署项目并提高开发效率,但学习使用这些框架需要付出额外的学习成本。

最流行的PHP框架包括:Symfony, Zend Framework, LaravelPhalconCodeIgniter、Yii、ThinkPHP等等。

内置多样化的函数是PHP主要的特点之一,这些开放代码的函数提供了各种不同的功能,例如文件处理、FTP、字符串处理、等等。这些函数的使用方法和C语言相近(例如printf),这也是PHP广为流行的原因之一。

除了内置的函数之外,PHP也提供了很多扩展库(extension),像是各种数据库连接函数、资料压缩函数、图形处理等等。有些延伸库需要从PECL(PHP Extension Community Library)获取。

以下是PHP编程语言提供的库列表

源代码编码和加速

PHP源代码是可以直接读取的,即使放到服务器上执行也是一样。虽然让PHP多了弹性,但相对的会造成安全危机和性能下降的问题。

透过PHP编码器,可以保护PHP的源代码不被读取(对商业软件来说特别有需求),也可以提升执行的性能。有许多公司或团体开发PHP的编码器,将PHP程序编译成字节码(byte code),再透过服务器上安装对应的程序来执行PHP脚本。

除了透过编码器加速之外,PHP还可以透过动态的缓存机制来提升速度,加速工具有商业版的,例如Zend Platform,也有开放源代码的加速软件如eAccelerator、APC、XCache。

php包管理器

Composer是php社区用来管理依赖关系的工具,一般在php项目中通过composer.json声明依赖的外部php库,然后就可以使用Composer管理包依赖。

PHP编译器

PHP一直被当作解释器使用。PHP编译器则将PHP从解释器中分离,为加快运行和改善与以其他编程语言编写部分的互通性,例如Phalanger将PHP编译成通用中间语言和Hiphop for PHP把PHP源代码编译成C++等。Facebook因应其网站大量的用户,集成了HPHPc、HPHPi、HPHPd以及HHVM这四种脚本引擎,开发出HipHop for PHP,以加强网站性能。

发展

PHP 7

  • 基于PHPNG项目(PHP Next-Gen),它能让透明提升PHP程序性能,使PHP7的性能和HHVM相当
  • JIT引擎
  • 抽象语法树编译 AST: Abstract Syntax Tree
  • 异步编程

彩蛋

PHP含有多个彩蛋,可以透过在域名的后面加上特殊字符串显示彩蛋。例如,?=PHPE9568F36-D428-11d2-A769-00AA001ACF42则会出现PHP的logo,PHP版本的不同,logo也会不同;不过该特性已经在5.5版本中被移除[42]

趣闻

PHP编程语言的官方文档中曾写过“PHP是最好的WEB开发语言,那其他的语言如何呢?”,但是这句话被华语圈的程序员讹传为“世界上最好的语言”并加以调侃[43][来源请求]

注释

参考文献

引用

  1. ^ Lerdorf, Rasmus. PHP on Hormones – history of PHP presentation by Rasmus Lerdorf given at the MySQL Conference in Santa Clara, California. The Conversations Network. 2007-04-26 [2009-12-11]. (原始内容存档于2019-01-06). 
  2. ^ Version 8.1.6. 2022年5月12日 [2022年5月14日]. 
  3. ^ PHP:序言. [2013-05-13]. (原始内容存档于2013-08-06). 
  4. ^ the PHP Group. [2015-07-24]. (原始内容存档于2015-07-24). 
  5. ^ GPL-Incompatible, Free Software Licenses. Various Licenses and Comments about Them. Free Software Foundation. [2008-02-22]. (原始内容存档于2008-12-16). 
  6. ^ Usage Stats for April 2007. [2015-02-26]. (原始内容存档于2015-03-01). 
  7. ^ Usage statistics of PHP for websites. W3Techs - World Wide Web Technology Surveys. [2021-09-05]. 
  8. ^ php.net/history. [2018-08-12]. (原始内容存档于2018-08-16). 
  9. ^ 9.0 9.1 9.2 9.3 9.4 9.5 9.6 9.7 History of PHP and related projects. The PHP Group. [2008-02-25]. (原始内容存档于2008-07-08). 
  10. ^ Lerdorf, Rasmus. Announce: Personal Home Page Tools (PHP Tools). Newsgroupcomp.infosystems.www.authoring.cgi. 1995-06-08 [2006-09-17]. (原始内容存档于2006-09-03). 
  11. ^ Zend Engine version 2.0: Feature Overview and Design. Zend Technologies Ltd. [2006-09-17]. (原始内容存档于2006-07-19). 
  12. ^ Trachtenberg, Adam. Why PHP 5 Rocks!. O'Reilly. 2004-07-15 [2008-02-22]. (原始内容存档于2016-03-31). 
  13. ^ php.net 2007 news archive. The PHP Group. 2007-07-13 [2008-02-22]. (原始内容存档于2019-04-07). 
  14. ^ Kerner, Sean Michael. PHP 4 is Dead—Long Live PHP 5. InternetNews. 2008-02-01 [2008-03-16]. (原始内容存档于2016-03-24). 
  15. ^ PHP: Unsupported Branches. php.net. [2016-06-17]. (原始内容存档于2019-05-15). 
  16. ^ 16.0 16.1 16.2 16.3 16.4 PHP: PHP 4 ChangeLog. The PHP Group. 2008-01-03 [2008-02-22]. (原始内容存档于2008-02-28). 
  17. ^ PHP: Command line usage - Manual. php.net. [2016-06-17]. (原始内容存档于2016-06-26). 
  18. ^ 18.0 18.1 18.2 PHP: PHP 5 ChangeLog. The PHP Group. 2007-11-08 [2008-02-22]. (原始内容存档于2008-02-27). 
  19. ^ PHP: Introduction - Manual. php.net. [2016-06-17]. (原始内容存档于2016-07-03). 
  20. ^ PHP: PHP 5 ChangeLog. www.php.net. [2016-06-17]. (原始内容存档于2016-06-17). 
  21. ^ 存档副本. [2018-08-12]. (原始内容存档于2018-08-11). 
  22. ^ Zend Weekly Summaries Issue #359. [2008-12-16]. (原始内容存档于2009-01-03). 
  23. ^ Built-in web server. [2012-03-26]. (原始内容存档于2012-03-20). 
  24. ^ PHP: PHP 5 Changelog. [2018-08-12]. (原始内容存档于2018-08-13). 
  25. ^ Resetting PHP 6. [2015-07-24]. (原始内容存档于2015-07-24). There have been books on the shelves purporting to cover PHP 6 since at least 2008. But, in March 2010, the PHP 6 release is not out - in fact, it is not even close to out. Recent events suggest that PHP 6 will not be released before 2011 - if, indeed, it is released at all. 
  26. ^ PHP 7 moves full speed ahead. [2015-07-24]. (原始内容存档于2015-07-24). Recent versions of PHP have been part of the 5.x release series, but there will be no PHP 6. “We’re going to skip [version] 6 because years ago, we had plans for a 6 but those plans were very different from what we’re doing now,” Gutmans said. Going right to version 7 avoids confusion. 
  27. ^ PHP: todo:php70. 2015-05-27 [2015-06-01]. (原始内容存档于2015-06-21). 
  28. ^ PHP: phpng. wiki.php.net. [2016-06-17]. (原始内容存档于2016-06-16). 
  29. ^ PHP: ElePHPant. 2014-10-04 [2014-10-04]. (原始内容存档于2014-10-04). 
  30. ^ What is ElePHPant and Why PHP Uses Elephants in Some Logotypes?. [2017-09-30]. (原始内容存档于2017-02-14). 
  31. ^ The PHP Mascot's Birth - Creator Of The elePHPant Vincent Pontier Reveals The True Story!. [2018-08-13]. (原始内容存档于2018-08-13). 
  32. ^ Embedding PHP in HTML. O'Reilly. 2001-05-03 [2008-02-25]. (原始内容存档于2008-02-19). 
  33. ^ PHP-related vulnerabilities on the National Vulnerability Database. 2008-03-01 [2009-08-20]. (原始内容存档于2009-06-28). 
  34. ^ [1][失效链接]
  35. ^ PHP developer wiki server hacked. [2013-12-28]. (原始内容存档于2013-12-28). 
  36. ^ PHP官方网站被入侵,近期请勿从官方下载源码. [2013-12-28]. (原始内容存档于2013-12-28). 
  37. ^ 存档副本. [2018-08-12]. (原始内容存档于2018-08-13). 
  38. ^ [2]页面存档备份,存于互联网档案馆),Why are “echo” short tags permanently enabled as of PHP 5.4?
  39. ^ [3]页面存档备份,存于互联网档案馆),Escaping <? on php shorthand enabled server when using require
  40. ^ Types Introduction页面存档备份,存于互联网档案馆),The PHP Group
  41. ^ Language variables页面存档备份,存于互联网档案馆),The PHP Group
  42. ^ expose_php. [2018-08-12]. (原始内容存档于2018-08-13). 
  43. ^ 原文:PHP is the best language for web programing, but what about other languagesPHP: PHP and other languages - Manual. web.archive.org. 2010-05-07 [2019-02-21]. 

来源

网页

外部链接

{{bottomLinkPreText}} {{bottomLinkText}}
PHP
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.