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. H.264 Profile-level-id

    基于SIP协议的VOIP通信,该字段通常位于视频协商sdp报文中,如: video RTP/AVP rtpmap: H264/ fmtp: profile-level-id=42801E; packe ...

  2. 算法学习记录-图——最小路径之Floyd算法

    floyd算法: 解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包. 设为从到的只以集合中的节点为中间节点的最短路径的长度. 若最短路径经过 ...

  3. Django的中间件及WSGI

    什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出.每个中间件组件都负责做一些特定的 ...

  4. Java设计模式学习三-----工厂模式

    工厂模式 工厂模式(Factory Pattern)是Java中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,创建对象时不会对客户端暴露创建逻 ...

  5. 在使用Cocos2d-JS 开发过程中需要用到的单体设计模式

    JavaScript 单体模式的一种实现 T.getInstance = (function () { var instance = null; return function () { return ...

  6. RAISERROR 的用法(转)

    raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql server 2005的帮助 ]   其语法如下: RAISERROR ( { msg_id | msg ...

  7. 03-for循环in遍历

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

  8. 【Luogu】P2422良好的感觉(单调栈)

    题目链接 写代码能力需要极大提升.我在五分钟之内想到了单调栈,然后花了一个小时的时间去看我单调队列为啥写错了…… 首先这题需要转换自己的思维.枚举所有“最小点”,然后看它往左往右最大能扩展多少. 维护 ...

  9. USACO Runaround Numbers

    题目大意:问最近的比n大的循环数是多少 思路:第n遍暴力大法好 /*{ ID:a4298442 PROB:runround LANG:C++ } */ #include<iostream> ...

  10. 【基础操作】FFT / DWT / NTT / FWT 详解

    1. 2. 点值表示法 假设两个多项式相乘后得到的多项式 的次数(最高次项的幂数)为 $n$.(这个很好求,两个多项式的最高次项的幂数相加就得到了) 对于每个点,要用 $O(n)$ 的时间 把 $x$ ...