PHP到现在为止已经诞生12年了。在这期间它经过不断改善,已经成为Web开发最重要的语言之一。PHP能有今天这样的成就,它的3位创始人(Rasmus Lerdorf、Zeev Suraski和Andi Gutmans)功不可没。

PHP的诞生和Rasmus Lerdorf的经历密不可分。Rasmus Lerdorf于1968年生于格陵兰岛西部迪科斯岛上的Godhavn/Qeqertarsuaq。他是PHP的开山鼻祖。在设计PHP之前,Rasmus Lerdorf曾在上世纪90年代早期维护过新闻卫星通讯系统,并设计了用于验证数据正确性的错误验证协议。然后在1991年获得了2项加拿大的专利。在1991-1993,他做了近3年的Unix程序员,并成功地开发出了一个面向对象接口生成器。在1994年,Rasmus Lerdorf升任产品经理,主持并设计了很多基于Unix的通讯、GUI等系统。在1995年,Rasmus Lerdorf成为了一名IT顾问。在随后几年,他先后在University of Toronto 、Bell Global Solutions以、IBM、Linuxcare Inc和Dot.com Bomb/baby Vacation工作,并设计和开发了大量的软件系统。

Rasmus Lerdorf在2002年正式加盟Yahoo,在Yahoo他一直从事PHP、Apache、Ajax等技术相关的开发工作以及软件构架的研究

图1 Rasmus Lerdorf

图2 Rasmus Lerdorf和他的儿子

多年的软件开发经验使Rasmus Lerdorf拥有了很深的技术功底。在1994年,他设计了PHP的第一个版本PHP1.0,并于1995年将其通过社区发布。在1996年,Rasmus Lerdorf又设计了PHP2,在1998年,由于Zeev Suraski和Andi Gutmans当时正在做毕业设计,需要一个用于开发Web程序的语言,他们也考虑了ASP和JSP,但由于ASP只能运行在Windows平台,而JSP又过于复杂,因此,他们最后选择了PHP,但他们发现,PHP的功能当时还十分有限,因此,他们决定为PHP重新编写底层的解析程序,这就是PHP的第一个被广泛使用的版本:PHP3.0。

Rasmus Lerdorf虽然创造了PHP,但也许他并不打算创业,而是选择了一些公司继续从事他热爱的事业。并作为PHP传道士到世界各地去宣扬PHP。图3是Rasmus Lerdorf正在斯里兰卡首都科伦坡进行一场别开生面的PHP讲座,其中著名科幻小说家Arthur C. Clarke出席了会议。

图3 Rasmus Lerdorf在斯里兰卡

而PHP的另外两位创始人Zeev Suraski和Andi Gutmans就没Rasmus Lerdorf那么安分了。他们在1998年重写了PHP3.0的解析器后,在1999年,他们成立了PHP的商业化公司Zend。再一次演绎了双人创业的神话,记得Google的两位创始人布林和佩奇也是在1999年创办的google,虽然Zend没有Google成功,但Zend的成立却为开源软件的商业化奠定的基础。

图4 Zeev Surask

图5 Andi Gutmans

Zeev Suraski自从1998年以来一直就从事着和PHP相关的工作。在开发完PHP3.0后,Suaraski和Gutmans继续着他们的PHP之梦,开始紧锣密补地开发他们的Zend引擎,也就是后来的的PHP4.0。在设计PHP4.0的同时,他们还为PHP设计了很多的组件,如服务抽象层和多线程支持。
Suraski 和Gutmans 天衣无缝地配合使他们的成就非凡,下面是他们的部分成就:

·Apache软件基金会成员
·获得1999年GNU自由软件奖提名
·获得1998年CNET Web革新奖亚军
·获得1999 LinuxWorld杂志最佳选择奖
·在Web技术杂志上pk ASP获胜,使PHP成为最优秀的Web开发工具之一。

Zend的创立和Google差不多,由于Suraski 和Gutmans都是搞技术出身,而他们并不擅长公司的管理。因此,Zend的另一位联合创始人Doron Gerstel开始进入人们的视线。Doron Gerstel出任了Zend公司的CEO,他拥有丰富的企业管理经验,Doron Gerstel使用这些经验使Zend成功地将PHP商业化,并推出了一系列的产品,如Zend Studio,一个用于Web可视化开发的IDE。

Zeev Suraski是个活跃分子,他正在全力将PHP推往全世界。Suraski为了推动LAMP在中国的应用,于2006年首次访华

图6 Zeev Suraski 在演讲

Zend公司现在已经进入了良性循环,在刚成立时融了800多万美元后,最近又获得了2000万美元的风险投资。在今年10月的Web开发大会上,Zend宣布要使用PHP建立新的Web应用,从而使Web开发更人性化。

图7 Web大会实况

Suraski 和Gutmans进行了多年的合作,他们正在带领着Zend向着预定的目标前进,希望在他们的带领下,PHP能有更美好的明天。

传奇的诞生,PHP三位创始人简介的更多相关文章

  1. 关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其他位数)

    关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其... 方法一:使用to_char的fm格式,即: to_char(round(data.amount,2),'FM9999 ...

  2. 用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。

    最近在看算法,看到这个题,觉得挺经典的,收起. 分析: 1 .把问题归结为图结构的遍历问题.实际上6个数字就是六个结点,把六个结点连接成无向连通图,对于每一个结点求这个图形的遍历路径,所有结点的遍历路 ...

  3. php实现数字格式化,数字每三位加逗号的功能函数

    原地址:http://www.jb51.net/article/73781.htm php实现数字格式化,数字每三位加逗号的功能函数,具体代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 ...

  4. PHP数字格式化,每三位逗号分隔数字,可以保留小数

    在报价的时候为了给浏览者更清晰明确的数字,所以需要用到数字格式化,有两种方法,一种自己写函数,另一种当然是系统自带的,其实我更喜欢系统自带的. 先来系统简单的: string number_forma ...

  5. C++ Ouput Exactly 2 Digits After Decimal Point 小数点后保留三位数字

    在C++编程中,有时候要求我们把数据保留小数点后几位,或是保留多少位有效数字等等,那么就要用到setiosflags和setprecision函数,记得要包含头文件#include <ioman ...

  6. 学习练习 java 不重复的三位偶数

    编写一个Java程序,计算一下1,2,…,9这9个数字可以组成多少个互不相同的.无重复数字的三位偶数. package com.hanqi; //编写一个Java程序,计算一下1,2,…,9 //这9 ...

  7. js验证连续两位数字递增或递减和连续三位数字相同

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  8. js给数字加三位一逗号间隔的两种方法(面试题)

    方法一:   <script type= "text/javascript"> //保留三位小数,toLocaleString() 方法可把一个 Number 对象转换 ...

  9. 取小数点后三位的方法(js)

    使用js取小数点后三位的方法,我觉得这个方法最好 Math.round(num*100)/100 还有其他方法: http://hi.baidu.com/yansueh/item/f026d8d759 ...

随机推荐

  1. MongoDB的正确使用姿势

    本文来自网易云社区,转载务必请注明出处. MongoDB是一个非常有前途的数据库,MongoDB官方对自己的定位是通用数据库,其实这个定位跟MySQL有些像.虽其流行度还远未达到MySQL的水平,但笔 ...

  2. openscad 3Dmodels 笔记

    参考链接 官方文档 官方文档之--代码 如何快速上手 打开openSCAD后界面如下: 选择其中的examples,从basic看起.配合官方文档中的first step部分,和官方文档--代码写法即 ...

  3. 【LeetCode】Reverse Nodes in k-Group(k个一组翻转链表)

    这是LeetCode里的第25道题. 题目要求: 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最 ...

  4. python--getitem一拦截索引运算

    getitem一拦截索引运算 __getitem__方法拦截实例的索引运算.当实例x出现在x[i]这样的索引运算中时,Python会调用这个实例继承的__getitem__方法(如果有的话),把x作为 ...

  5. ES6 Arrow Function & this bug

    ES6 Arrow Function & this bug let accHeadings = document.querySelectorAll(`.accordionItemHeading ...

  6. [luoguP2495] [SDOI2011]消耗战(DP + 虚树)

    传送门 明显虚树. 别的题解里都是这样说的. 先不考虑虚树,假设只有一组询问,该如何dp? f[u]表示把子树u中所有的有资源的节点都切掉的最优解 如果节点u需要切掉了话,$f[u]=val[u]$ ...

  7. Ionic1与Ionic2

    1.Ionic2新特性 ①组织结构与框架: 在Ionic2中,每个组件.页面都只专注于做一件事,它单独有自己的一个目录,有自己的类(Class).模板文件(Template)和自己的样式文件(在这里我 ...

  8. Merge into语句用法及其效率问题

    Merge into语句用法及其效率问题 /*Merge into 详细介绍MERGE语句用来合并UPDATE和INSERT语句.通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询, ...

  9. 关于虚拟机IP网段和公司内网网段的问题?

    开发四年只会写业务代码,分布式高并发都不会还做程序员?->>>    请教一个问题,为了解决电脑换网络环境就连不上虚拟机的问题,我虚拟机使用的nat模式,我的VMnet8IP是192 ...

  10. android悬浮窗口的一些说明

    1.xml文件里的权限申请 <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" ...