PHP诞生于1994年,由时年17岁的丹麦籍程序员Rasmus Lerdorf创建。
图1-1 PHP创始人Rasmus Lerdorf
从二十世纪九十年代开始,Web应用均按CGI标准编写。所谓CGI(Common Gateway Interface,通用网关接口)是1993年11月4日由NCSA Mosaic制定并颁布的标准,它规定了相关细节,允许Web服务器连接到高级编程语言来生成动态网页,最初实现的语言只有Perl和C。
PHP的首个版本使用Perl开发完成,用于Rasmus Lerdorf的个人主页上,记录访客并与其互动,包括留言板、用户验证、数据统计与数据存储。
1995年,Lerdorf将这个产品命名为“个人主页工具/表单解释器(Personal Home Page Tools/Form Interpreter)”,简称为PHP/FI。
随着访问Rasmus Lerdorf的网站访客逐渐增多,网站响应速度开始变慢,这是由于CGI技术设限所至致,其每次运行都会创建一个新进程,导致服务器内存占用越来越大,内存溢出后导至服务器宕机。
Lerdorf后来用C重写了PHP/FI内核,实现了与数据库的交互,包括新的语法结构,支持变量、条件与循环语句,支持自定义函数,这个重构的内核被命名为PHP 2.0。
PHP 2.0性能比PHP/FI快了不少,除了借鉴Perl的变量命名、表单处理等特性,它还具备嵌入到HTML中运行的能力,这也是PHP之后区别于其它Web开发语言的独特之处。
Lerdorf意识到Linux等开源软件的优势和潜力,遂决定也将PHP开源。接着Lerdorf就到开发者聚集的新闻组、邮件列表等渠道宣布PHP内核完全开源,包括内核代码和文档,希望让更多的人利用它来建立动态网站和Web应用,让Web开发效率更高。
1997年11月,PHP/FI 2.0正式发布并提供给公众开放下载。在接下来的时间里,用PHP构建的网站增长到5万多个。此时有一些开发者开始参与其中,帮助Lerdorf一起完善功能与扩展,Lerdorf仍按既定的开源模式与来自全世界的志愿们一起协同工作。
在PHP 2.0发布的同一个月,两位来自以色列理工学院的大学生Andi Gutmans和Zeev Suraski开始与Lerdorf深度合作,三人协同完成了PHP 2.0的内核开发。后来两人接手Lerdorf的一部分工作,负责构建和升级PHP内核的任务。
为了减少旧名称中的一些模糊和歧义,重新构建的语言仍沿用PHP的名字,按照开源GNU协议重新修正了PHP的正式全称:“PHP Hypertext Preprocessor”,即超文本预处理器。
正所谓“名正言顺”,PHP从此正式步入主流计算机编程语言行列。
图1-3 PHP 3.0创始人之一 Zeev Suraki
;;;;;;;;;;;;;;;;;;;;;;;;;;;
图1-4 PHP 3.0的创始人 Andi Gutmans
Andi Gutmans和Zeev Suraski两人接棒Lerdorf后,开始着手重写内核,并将版本号定义为3.0,简称为PHP3。从此,PHP的开发维护从Rasmus Lerdorf一个人,变成以Lerdorf为首,加上Andi Gutmans、Zeev Suraski以及Stig Bakken、Shane Cavaveo、Jim Winstead等分布于全球不同地区的技术极客组成的开发团队,称为PHP小组(PHP Group)。
2.PHP3
PHP3在公开测试9个月后,于1998年6月6日发布正式版本。
PHP3增加了一些实用扩展模块,具备更健壮底层架构,开始提供面向对象语法支持,更强的数据库处理能力。由于PHP3整体运行速度更快,这使得PHP服务器部署量猛增,截止到1998年,使用PHP的网站约有500万个,超过80万以上独立IP,相当于当时世界10%以上的网站都用PHP作为主力语言。
3.PHP4
由于PHP3受到广泛欢迎,Gutmans和Suraski又冒出大胆的想法,两人决定重新构建PHP内核引擎,使其性能变得更好,能够支撑更复杂和健壮的应用,同时把基础应用进行模块化。
1999年,在以科技创新著称的以色列,一家名为Zend Technologies的科技公司诞生,同时它宣告即将发布PHP新内核,而这家公司的创始人正是Gutmans和Suraski,而Zend的名字源自Gutmans与Suraski名字的前半部分——Zeev和Andi。
图1-5 Zend 科技公司官网(https://www.zend.com)
2000年5月22日,PHP4 以Zend Engine 1.0的新内核正式亮相。它除了提供更好的性能外,还支持更多类型的Web服务器,增加了会话管理、输入输出缓冲以及多系统支持等特性。此版本受益于世界各地数十位开发者的贡献,在全球扩展到20%的网站都开始使用PHP,例如雅虎、E-Trade、Craglist等大型互联网公司的产品,PHP开始成为Web开发的强大动力之一。
2008年8月PHP4发布4.4.9,此为 4.x的最终版本,在持续维护8年后被 PHP5代替。
4.PHP5
虽然PHP4已经能够胜任绝大多数的Web应用,仍有为数不少的开发者“抱怨”说,PHP4在面向对象机制方面的欠缺,致使在开发大型企业级应用方面存在不足。
另外,脚本程序通常针对Web方式交互的用户,开发者还需要一种应用服务器(Application Server)的功能,就是让PHP可以脱离浏览器,在命令行或工作台下也可以运行(short for Command Line Interface,CLI模式),而很多应用开发,需要在操作系统后台实现自动化的服务功能,这一需求在PHP5中得到了相应支持。
PHP 5.0在2005年推出,开始与PHP4并行过一段时间。经过一些大小功能修复,PHP 5.4稳定版于2012年8月发布。接下来的一年,2013年8月PHP 5.5发布,成为大多数平台的主版本。2018年4月26日,PHP 5更新至5.6.36版。
值的一提的是,从PHP5开始就有一些中国人参与其中,如PHP手册汉化的乔楚,OpCache的作者惠新宸以及异步多线程服务器Swoole作者韩天峰,另外国内知名的PHP框架ThinkPHP作者刘晨也是从2006年开始的基础开发,继而成为中国受欢迎的PHP框架之一。
PHP5的生命周期长达14年,此版本开发的应用软件所占比例也最多。但随着技术内外部环境的变化,PHP5也面临着安全、性能以及本身架构等多方面挑战,此版本的使命在2018年底正式完成。
4.PHP6
PHP 6早在2010年初就开始发布。它移除了PHP5向下兼容能力,添加了一些诸如命名空间等新特性。由于这些新特性在与PHP 5.x的兼容方面存在一些问题,某些模块设计也不稳定,因此在开发者的口碑并不如PHP 5那么好。后来PHP小组索性将PHP6的一部分新功能回炉到了PHP 5.6。
PHP6一直处于Beta版状态,与PHP5并存了很多年。随着越来越多的特性转到了PHP 5.6,余下就是Unicode 内核和语法方面的改进,这似乎也变得不那么紧要,而且新特性需要开发者的编码习惯也需要慢慢调整,修改项目旧代码来适应PHP6也非一日之功,于是它彻底成为一个过渡性版本。
2011年上半年,这个名字的PHP彻底终止维护。
5. PHP7
2015年12月,PHP 7.0正式版发布。
在此之前,PHP5受到HHVM(全称为Hip Hop Virtual Machine)的强烈挑战,HHVM源自Facebook的内部项目,Facebook 最初完全使用PHP开发,后来成为全球最大的社交网站。由于每天有几亿级流量访问,性能成为它的最大瓶颈,于是其内部团队尝试改造PHP源码以打造新的解析引擎,它的机制是将PHP代码实时编译为中间码,然后再转换为x64位机器代码,以达到最佳性能。发现效果不错,后来Facebook就将HHVM开源,一度受到PHP开发者的追捧,如果不是代码兼容问题几乎快成了PHP的新分支。
图1-3 hhvm官网(https://www.hhvm.com)
受到HHVM 的“刺激”,PHP开发小组发起了PHPNG 项目 (PHP Next-Gen),这群Geeker们在该项目做了非常大的努力,特别是性能上做了非常大的跃升。它内置新的Zend Engine、Zend OpCache、改进的垃圾处理GC、HugePage、PGO等特性,在语言层更加严谨、规范。
辛苦和迭代没有白费,PHP 7.4版本成为一个新里程碑,该版本受到开发者的广泛赞誉和主流应用版本,同时挽回了HHVM所受到的影响。
6. PHP8
PHP 8在2020年12月份正式发布。除了加入预加载、FFI(Foreign Function interface)新特性,最值得一提的就是JIT编译器(Just in time缩写,运行时直接编译为机器代码)。PHP 8还推出了联合类型变量,还有很多语法和函数的一致性等方面进一步优化,并与现代编程语言在架构与体系上保持一致。
此外,PHP的MVC框架、异步PHP、静态分析工具等现代级开发工具亦在不断完善,Laravel 和 Symfony、Zend以及国内的ThinkPHP生态正呈现着蓬勃发展态势。