不忘初心,方得始终——ThinkPHP十三周年报告

不忘初心,方得始终——ThinkPHP十三周年报告

楔子

不知不觉中,ThinkPHP已经走过了十三个年头,想想十三年前的那个形单影只的夜晚,一个痴迷PHP但却稚嫩的新手在键盘上敲击出欢快的节奏,完成了最后几行代码,然后发布到了自己的博客,谁也未曾想到,这一时刻能造就了一个延续十三年的国民开源产品。

其实本文不算一篇报告,似乎更像是一个随想录,感谢这么多年大家关注和使用ThinkPHP,文末我会附上一个福利给大家。

ThinkPHP诞生记

ThinkPHP前身是一个叫FCS(全称为 Fast,Compatible & Simple OOP PHP Framework)的简易PHP框架,诞生于2006年1月15日,早期仅仅是因为个人爱好发布在作者的博客上(世纪流年Blog,曾经博客的PR值最高到过7,物是人非,当年的博客早已不存在了,如今还知道这个博客的估计寥寥无几了),每天居然还能有几十个下载,也算是一个无心插柳的产品,现在使用ThinkPHP的用户大概怎么也有好几百万了吧。

由于开发框架的时候,正在一个Java项目组做一个电子政务的项目,当时还是使用的Struts,所以早期受Struts影响较多。融合了StrutsActionDao思想、JSPTagLib(标签库),包括后来RoRORM映射和ActiveRecord模式,Django的路由,说来奇怪,一直在参考一些其它语言的思想和框架,却没有去参考一些PHP框架(可能那个时候成熟的也不多吧)。

从一开始,ThinkPHP就定位为一个完整的轻量级MVC框架,每个组件都是独立实现,没有任何其它的依赖,包括模板引擎。这对于当时的时代环境很重要,一个开箱即用的开发框架对于开发者是友好的,毕竟十多年前的互联网应用本就没那么复杂。

一年之后,框架正式更名为ThinkPHP,同时开通了SourceForgeGoogle Code项目。取名为ThinkPHP,其实是受《Thinking in Java》的影响,希望ThinkPHP是一个有自己编程思想的框架,还给自己起了一个Slogan—— 大道至简,开发由我,英文是WE CAN DO IT JUST THINK。

之后的一年里面,不断更新迭代,努力完善,直到2008年1.0正式版本发布(这是一个PHP5的重构版本),用户群才开始真正起来,一天的下载量相当于之前一个月的下载量了。可见作为一个开源项目,而且2年的时间培养根本不算啥,如果熬不住,基本上第三年也就消失了。

之后的几年里面陆续发布了几个里程碑版本,直至3.2.3版本进入ThinkPHP的黄金时代,无论是功能还是性能都进入一个很高的水准,增长了大量的客户,可以说国内PHP网站里面有三分之一都是基于ThinkPHP开发。那个时候ThinkPHP对SAE的支持非常完美,本地开发后部署到SAE无需任何的代码调整,ThinkPHP的SAE引擎在SAE官方商店里面排名始终领先于其它的开发框架。

2015年后彼时PHP业态已经很成熟,开发者对于开发模式以及PHP框架的想法已经开始改变,团队开始考虑如何改变自己和摆脱旧开发时代的烙印,于是中止了已经在开发中的ThinkPHP4.0版本,重新审视自己和框架的定位,参考和借鉴了一些国外的先进设计理念,陆陆续续耗费了一年的时间在工作之余完成了ThinkPHP5,这一版本完全脱胎换骨,为后面的版本奠定了新的基础。因为倡导了为API开发而生的设计理念,有大量的新用户开始支持和关注ThinkPHP5。

不得不说,和ThinkPHP同时代的框架,无论国内外到现在依然活跃的寥寥无几,得益于ThinkPHP5此次架构和思想的成功转型,同时也让ThinkPHP跻身国际主流开发框架的行列。

2018年初ThinkPHP5.1版本正式发布,十个月后正式宣布为LTS版本,这是ThinkPHP历史上第一个名义上的LTS版本,事实上,历史上的每个大版本都至少提供了三年的维护支持。

是什么让ThinkPHP一直坚持

十三年来,ThinkPHP一直以简化开发为己任,秉承大道至简的开发理念,并且不断的努力提升和突破自己,在国内严苛的开源环境下不屈不挠十年磨一剑,终于打磨出了国内第一开源PHP框架的这把亮剑。

究竟是什么让我一直在坚持做ThinkPHP?我经常会不断问自己。是因为有钱途还是成就感?思来想去,总觉得都不是,因为直到现在也没能靠自身赚钱,何来的钱途,成就感就算有也应该是当初最火的时候就已经有过了吧。国内的开源项目(甚至是商业项目)过几年就关停不再维护的很多很多,在ThinkPHP当年的客户里面,很多商业网站过几年连网站都打不开了。

应该来说,如果不想继续维护开源项目,应该有很多说的过去的理由,自己看着ThinkPHP一天天的长大完善,像是对待自己的孩子一样不舍,这是有感情,对框架的每一行代码都精益求精,仔细推敲,每天坚持进步一点点。二是因为一份责任感,对用户要有所交代,仿佛变成一种精神支柱,同时以用户的开发体验为己任,因为自己也是一个非科班出身的小白用户,更希望站在小白的立场上多考虑一些。

国内和ThinkPHP同时代的PHP框架不少,而且技术思想都不比ThinkPHP差,但过了没几年,基本上问津的很少了,更为奇怪的是涌现出了在ThinkPHP思想基础之上的改良版或者教学版框架。显然,在那个时代,简单和快速两个特性能够让很多用户趋之若鹜吧,而ThinkPHP恰巧符合了这两个条件,较低的门槛让追求产品快速变现的成本变得更低。

ThinkPHP的定位一直都是轻量级,快速实用,并且重视开发体验。无论如何,总归是走出了一条自己的路,十三年,也许只是一个新的开始,痛并快乐着!

做开源容易么

作为一个开源软件,这么多年来,每年都要遭受来自不同地方的不同类型的攻击
在经历了多少风风雨雨之后,支撑我们依然屹立不倒的原因就是用户的信任和支持。为了不让做出选择的用户失望,我们积极响应,答疑解惑。ThinkPHP每次版本发布都是不是简单的修修补补,都蕴含了大量的更新和特性。毫不夸张的说,那个时候,吃饭、走路甚至是睡觉,想的都是怎么改进框架和增加新功能,可谓是为伊消得人憔悴,衣带渐宽终不悔。十多年哥写的不是框架,而是青春~

多年来,我们也遭受过谩骂,遭受过不断的黑客攻击,还遭受过做项目被客户挖角整个团队的苦楚,但所幸阳光总在风雨后,ThinkPHP在风雨飘摇中茁壮成长。只要用户还在,ThinkPHP还在,那个梦想就未曾走远。

2018年11月12日,那天早上我在医院用手机完成了ThinkPHP开发者周刊第六期,下午听到宝宝出生时啼哭的那一刻,心中无比激动,ThinkPHP终于不再是我的全部寄托了,而那天正是开源中国2018年度最受欢迎开源软件投票的第一天。21天后,ThinkPHP荣获2018年度最受欢迎开源框架。

想想,也许有些事情就是会值得你去为之付出~

重构!重构!重构!

ThinkPHP的版本迭代速度很快,原因是我前面提过的,希望每天都有进步,十多年来,几乎平均每天都有大大小小的代码提交,积少成多,所以每次新版都不是一个简单的修修补补的版本,包含了大量的细节完善和新特性,所以ThinkPHP用户抱怨最多的就是刚学会又发布新版本了,还不能无缝升级,坑。

因为不满足于现状,每次大版本都会利用新的PHP特性或者新的架构思想重构大量的代码,不希望为了兼容而增加大量冗余的代码和降低性能,这有悖于ThinkPHP的定位和初衷。导致的结果是,每次大版本更新都几乎无法无缝升级。其实,有很多的时候,在重构新版的时候,并没有考虑太多,很多功能特性都是吃饭走路的时候灵机一动从脑子里面蹦出来的,就像一个科学发明一样,你不可能知道你什么时候会发明一样东西。ThinkPHP就是在这种类似一休哥一样的灵机一动中完成不断的细节创新。

新版本的设计原则是初期不被兼容性制约,大胆的创新和设计,在完成重构后再来考虑是否方便做兼容升级。抑或我心中希望每一个大版本都是一次全新的开始,能够放下历史包袱前行,事实上也是一个自我修炼的过程,每次重构新版本都能得到不少的技术能力提升,让一个小白成长为大牛的必经之路就是不断实践,努力创新。

总之,一句话,我们所有的一切努力都是以产品更好用为第一原则,目的就是让开发变得更简单。

安全问题

由于大量的用户群体在使用,尤其是基于ThinkPHP开发的各种产品甚多,ThinkPHP历史上出现了不少重大的漏洞,但几乎对ThinkPHP的用户没有影响,各大平台的漏洞播报和公告反而让ThinkPHP声名远播(去年12月份还引起了ZDNet的关注,参考这里)。

对于一个开源项目而言,漏洞并不是最可怕的,我们不逃避,因为漏洞一直就躺在那里,你发现一个漏洞就少一个安全隐患,明知道有漏洞却不修复不公告,很容易给黑客肆无忌惮的机会,能做到Firefox存在11年未修复的漏洞实在是难能可贵。官方发布的安全更新版本中,有一些漏洞是官方自己根据用户反馈提前自己挖出的漏洞。

官方非常重视框架的安全问题,针对高危漏洞的处理和修复响应非常之及时,平均修复速度不超过三小时,安全版本的发布不会拖延超过三天。针对高危漏洞,官方通常会单独发布一个安全更新版本,以示重视。一般的漏洞则会在发布新版本的时候同时修正和改进。所以如果看到官方的发布版本标题中有安全更新字样,请务必重视并及时修复。

另外有句话如鲠在喉不得不说,国内某个安全平台未经证实播报不实漏洞或者虚报漏洞等级来吸引眼球(以便推广自己的安全服务),然后自己却拒收白帽子的安全漏洞,延误官方修复和给黑客以可乘之机,简直骇人听闻。

在此,向如下安全平台以及白帽子们致谢,是你们让ThinkPHP更安全。

注:以上排名不分先后。

ThinkPHP安全守护者计划

为了应对今后的安全问题,ThinkPHP联合360安全团队和腾讯安全团队的成员成立了ThinkPHP安全守护者计划,成员共6名,分别来自360安全团队、腾讯安全团队以及ThinkPHP官方成员,共同致力于守护ThinkPHP核心框架的安全。

ThinkPHP的发展史就是代码托管平台的发展史

ThinkPHP十多年的发展过程中,出于不同的原因在不同的阶段选择了不同的代码托管平台,刚好也见证了代码托管平台的历史演变。

博客下载

开始的时候仅提供了博客下载,但随着用户群的增大和流量问题,开始寻求代码托管平台。

SourceForge

老牌的全球开源软件平台和仓库,似乎目前仍然在更新维护,最早,ThinkPHP在SF上登记和提供了下载,这个时候属于文件托管时代,还谈不上代码的版本控制。

CodePlex

微软的代码托管平台,ThinkPHP在上面开过项目,但也仅此而已,毕竟CodePlex还是微软的技术为主。目前官方已经于2018年1月30日正式宣布关闭,进入封存状态,查看ThinkPHP项目的归档页面

Google Code

谷歌的代码托管平台,主要基于SVN版本控制,ThinkPHP迁移到Github之前的主力托管平台,已于2016年1月27日关闭,查看ThinkPHP项目的归档页面,特意看了下,一共有3092次代码提交,偶尔上去看看当年的issue也挺有意思的。

Github

自从使用了Git版本控制后,就一直托管在Github上,目前仍然是主更版本库。包括Composer包都是基于Github的分支打包。

Github地址:https://github.com/top-think/think
3.2版本地址:https://github.com/top-think/thinkphp

希望看到这里的朋友给个Star,目前的Star数量仍然不超过10000,和国际主流PHP框架相去甚远(也有用户建议我去淘宝买Star~^_^)。

Gitee/Coding/CSDN Code

由于国内的代码托管平台渐渐兴起,2011年ThinkPHP首次入驻开源中国的代码托管平台(那个时候还没有Gitee),包括后来的CodingCSDN Code,主要是为了满足国内用户访问Github速度较慢的问题。

Gitee:https://gitee.com/liu21st/thinkphp5
Coding:https://coding.net/u/liu21st/p/thinkphp5

说到CSDN的Code,当初号称融资千万,邀请我们使用的时候还给他们提了不少的建议,结果不了了之,后来没几年就关停了并公告迁移到码云,一个代码托管平台的生命周期还没有一个开源项目长,而且不提供归档服务,连当初的公告页面现在都已经404,看起来CSDN真的是没什么前途了。

GitLab

后来因为业务需要,公司用GitLab自建了自己的版本库,大的改动会优先在内部版本库进行开发测试。

那些年获过的殊荣

  • 2012年开源中国最受欢迎开源软件评选第二名(参考链接

  • 2013年入选中国开源促进联盟的推荐开源项目

  • 同年获得中日韩三国共同举办的东北亚开源论坛技术优胜奖

  • 2016年开源中国最受欢迎开源软件评选第八名(参考链接

  • 2017年获得码云最有价值开源项目GVP

  • 2017年开源中国最受欢迎开源软件评选第15名(参考链接

  • 2018年开源中国最受欢迎开源软件评选第10名(参考链接

  • 2018年开源中国最受欢迎开源框架第一名

当然,这些其实都比不上用户对我们的支持和认可。

ThinkPHP用户报告

用户报告的数据根据官网用户数据分析而来,不一定能完整代表ThinkPHP的用户情况,如今,框架下载和交流都不一定要通过官网了,所以仅供参考。

用户分布

ThinkPHP的用户分布在全国包括香港和台湾在内的各个省份,其中广东人民最喜欢用ThinkPHP,其次是北京、江苏、福建、浙江、山东和上海。

白俊遥博客

年龄层次

ThinkPHP的用户年龄非常年轻,18-24岁的占比最高,为37.84%,其次是0-17岁,为21.47%,25-39岁的占比12.61%。

白俊遥博客

学历分布

ThinkPHP的用户学历还是略高端,本科占比31.12%,高中27.57%,看起来ThinkPHP的学习门槛确实很低,高中以下学历占了66.36%。

白俊遥博客

性别

看起来ThinkPHP开发者超过70.89%都是男生,7%女生。

白俊遥博客

新老用户比

ThinkPHP新用户在所有用户里面占比62%,有日益增长的趋势。

白俊遥博客

趋势数据

目前主要流行的PHP框架百度指数最近一个月的趋势数据对比,鉴于目前国内的谷歌搜索的限制问题,谷歌趋势数据就不同比了。

白俊遥博客

Github数据

ThinkPHP应用仓库(5.1分支)数据:Star数 6107,Fork数1385,提交次数1884,PR数259,Issue数620。

白俊遥博客

ThinkPHP核心框架(5.1分支)数据:Star数1436,Fork数697,提交次数4946,PR数932,Issue数689。

白俊遥博客

Gitee数据

ThinkPHP应用仓库
白俊遥博客

ThinkPHP核心框架
白俊遥博客

ThinkPHP开发者周刊

白俊遥博客

为了致力于ThinkPHP的生态建设,官方团队在2018年国庆创建了「ThinkPHP开发者周刊」,更好的鼓励和传播ThinkPHP生态的优秀内容和产品服务,每周一通过QQ群、微信和邮件的形式推送给用户。希望更多的用户给我们投稿和推荐,你的点滴贡献可以让更多的开发者和企业从中受益。

关于捐赠

ThinkPHP是一个开源的PHP框架,并一直坚持免费使用,如果你觉得对你个人或者企业有帮助,欢迎捐赠。

捐赠方式欢迎在官方手册中直接进行打赏(每次打赏金额不超过200),你的昵称和打赏金额会出现在打赏列表中。

如果您希望进行大额捐赠或者企业捐赠可以通过支付宝转账方式。

白俊遥博客

我们的赞助商

这么多年来,要不是因为我们有一些赞助商无偿的支持我们,估计就看不到今天这份报告了。再次感谢他们对ThinkPHP的支持。

注意,以下排名不分先后。

我们的客户

ThinkPHP的客户遍布大江南北,各行各业,包含但不限于腾讯、360、联想、华为、万科……只要是用过PHP的公司,80%会用过ThinkPHP的某一个版本。

基于ThinkPHP开发的产品

这个实在太多了,列出来有广告的嫌疑,而且列谁都不好,大致来说,各行各业都有ThinkPHP开发的产品,然后这些产品所覆盖和涉及的网站更是数量级的,另外官方的开发者周刊目前每期都会推荐一个基于ThinkPHP的应用。

关于未来

ThinkPHP肩负使命,任重而道远,无论如何,我们都将坚持初心,始终秉承让开发变得更简单的原则,坚持不懈,努力完善,并致力于打造ThinkPHP的生态,希望更多的志愿者和厂商和我们深入合作共赢。

联系我们

微信公众号

白俊遥博客

邮箱

thinkphp#qq.com

合作请联系

微信 topthink或者 QQ:130770305

最后是福利

我会在微信分享本文的朋友里面,抽取10名幸运者(请加我微信topthink,然后提供截图),每人赠送一本《持续交付2.0:业务引领的DevOps精要》

白俊遥博客

乔梁是《持续交付》译者,持续交付领域专家,持续交付和DevOps理念在国内的首批实践者和布道者,被业界称为“国内持续交付第一人”。国内最早致力于通过敏捷开发与精益理论改善软件价值交付效率的实践者之一,精研各种软件工程方法论。

8年后乔梁带着他的全新著作《持续交付2.0:业务引领的DevOps精要》面向大众。这本书将《持续交付》一书的思想融会贯通,经过8年的管理实践,精心总结与提炼,提出“持续交付2.0双环模型”;作者独创性地将持续交付理论与当前的技术热点DevOps理念完美结合。


逆天的蝈蝈博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论