最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

为什么政府项目不管大小,基本都选择java语言,不选择PHP呢?

XAMPP新闻 中文小张 305浏览 0评论

政府项目,最终运行环境复杂多样,有一般PC,有X86服务器,也有IBM的小中大型机,操作系统也是从Windows server 2003到2012都有人用,还有各种年代的Redhat和Suse的发行版,用各种版本AIX的也不少。数据库也是sqlserver和oracle都有,还有一些小型机跑db2的,mysql/pgsql是很非主流的,只有预算很低的项目才用。而且最终部署的环境,很多是没有外网网络的,需要离线部署。

如果用PHP,你是不是要自己去编译各种系统下的二进制版本,如果部署环境有多种系统和不同版本,你是要提前准备好多少个安装包?有的项目,直到快上线的时候,才知道采购的是什么系统,有时甚至政府那边的对接人,他都无法准确描述系统的型号和版本,只有你亲自到了机房查过才知道。就算知道准确的型号,比如告诉你系统是AIX 5.3,你得先搞一套干净的同版本的AIX环境,然后从安装gnu make和gcc开始,一个个的把PHP依赖的库编译好,再把PHP和一堆PHP扩展编译好,中途可能还会编译报个错,需要自己hack一下。碰上某些不支持XX系统的扩展,你怎么办?

如果用Java,你只需要把几个平台的JRE准备好,比如64位Linux版,它支持所有的64位Linux系统,你不需要区分它是红帽6还是红帽7,也不需要区分它是红帽还是suse,Oracle都帮你做好了。一般Java项目,很少用JNI调C扩展,依赖基本上都是jar,不用为不同的系统编译不同的扩展,一个war或者jar就全在里面了。

PHP比较方便的热更新,在政府项目里往往用不到,很多时候还得人去了机房在内网才能更新。

兼容性

不像一般web项目,大点的政府项目都会层层分包给不同的公司,他们还会采购一些中间件,这些中间件厂商,往往只有C和Java的SDK,其它语言,呵呵,他们一概不理。你用PHP,意味着只能自己琢磨写个扩展,文档不全,还很少人用的中间件,自己琢磨写个扩展,成本是很高的。就算是很小的项目,甲方也有可能扔一个私有的加密解密算法来,只有一个jar包和一页example,没有其它说明了,连C的SDK都没有,你怎么办?

之前碰到过一家API对接,他们依赖某个JDK的算法实现,用Java对接半天可以跑通,用PHP,给你3天也不见得能把那段算法翻译成PHP版,碰到这种情况,跟谁说理去?

丰富的库

政府项目经常需要的工作流引擎,office文档操作,报表系统等等,Java的轮子不但更多,还更圆。对,图灵完备的PHP,没有做不了的事情,用PHP写个JVM甚至模拟个X86虚拟机都没问题,但是成本呢?便利性呢?

有的项目是要有桌面版客户端的,Java的swing或者JavaFX好歹能很方便的画个GUI界面,PHP的话就没这么方便了,还是那句话,能做和方便做,完全是两码事。

性能

可能很多人一听政府项目,就觉得一天只有几千PV,不需要性能。这是个很大的误解,政府项目类型非常多,跨度非常大,大到百亿PV的12306,小到一天只有几百PV的管理系统,都是真实需求,选择用Java和C++来做,在性能上是比较恰当的。碰到跑批量的时候,几百万或者几千万量级的数据做点分析,完完全全的CPU密集型计算,Java 两三个小时能跑完的日常分析,换成PHP可能一天都跑不完,加机器不要钱?况且有的计算并不能很方便的分布式。

人员配备

小型外包公司,养几十个Java,和几个C++就够了,基本上可以涵盖大部分政府项目了,养PHP开发,没PHP项目的时候,这些人开掉吗?有时比较忙的时候,也会从人头外包公司租几个开发,人头皮包公司供应的大都是Java。就算是PHP玩的很溜的互联网公司,做到一定规模,也少不了养几个C++和Java开发,反过来却不是。

知名度

政府有关领导,听过Java的可能性远高于PHP,就算没听过,一个是Oracle这样的大外企的产品,一个是社区产品,土包子眼里会觉得哪个更靠谱?你是买大众或者通用的车,还是几个爱好者自己组装的车?

开发效率

坦白讲,PHP的开发效率绝对不低,远高于2010年之前的Java。很多人对Java的印象还停留在SSH时代,以为Java写个web,要写一堆XML文件,加个表单可能要改好几个文件。以前确实如此,很麻烦。现在完全不同了,spring boot开启了新的篇章,一个XML文件都不需要了,也没有一大堆的配置。

package hello;

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;

@Controller
@EnableAutoConfiguration
public class SampleController {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleController.class, args);
    }
}

这是一个完整的Java web程序了,不用什么XML,不用什么配置tomcat,默默的内置tomcat服务器了。Java的开发效率,早已不可同日而语,PHP在开发效率上的优势已经不明显了。

当然了,也不是绝对不能用PHP,多年以前我也做过一个PHP的政府项目,PHP部分是我一个人完成的,甲方那边的技术只知道ASP和JSP,我还给他科普了一下PHP。

我最早用过几年PHP,私下喜欢Python和Kotlin,也熟悉Go,也曾写过几万行C++,但是让我承包政府项目,我还是会用我觉得写起来有点罗嗦的Java,并且禁止使用lambda等高级特性。

@eechen

我当然知道XAMPP,但是你知道XAMPP FAQ里写了这句吗?

XAMPP is not meant for production use but only for development environments.

XAMPP有AIX的包下载吗?Solaris包也有6年没update了。当然了,你要是愿意折腾,各种平台都能编译个自己的版本,官方不支持的平台,也能port一个过去,但是成本呢?

我也算见过很多基于webkit的GUI方案,我曾用nwjs做过一些私活。一些知名项目也在尝试用这种方案,比如github的atom和微软的vscode,国产软件阿里的钉钉也是这个方案。如果要选webkit方案,nwjs和electron那是nodejs的生态,跟php没什么关系。

PHP能操作word和excel,但是支持程度比poi差一些。PHP的工作量引擎,没有一个能跟jBPM或者activiti相提并论的。google开源的grpc框架,竟然不支持php做为server,呵呵。apache的spark,例子都是scala,java和python,没有php。在库的丰富和厂商支持程度上,PHP向来都是二等公民。做过的政府项目越多,这种感受就越深。

PHP在脚本中性能是排前几了,然而政府项目除了页面,大都是Java和C++还有存储过程了,根本没人在意一个脚本的性能怎么样,在CPU密集型计算里,PHP仍然比Java慢一个数量级。我可以利用PHP和JVM的特性构造N个反例证明php性能比java好,但是实际情况如何,大家都心中有数。不要说什么瓶颈都在数据库都在架构,语言性能次要,真要这样,花那么多力气搞PHP7,然后还吭哧吭哧的搞JIT,不是多此一举吗?你不能拿web那套东西套在所有政府项目上,不全是增删改查个数据库这么简单的,有的业务不大方便用Java写,一个存储过程几千行,自有它存在的道理。

热部署很好,可惜政府项目用不上,往往几个月才部署一次,甚至稳定之后就再没更新过,不像互联网公司一天要发布好多次。然而主流互联网公司的生产环境,不论是PHP还是Java,都是自动部署的,不存在哪个更方便的事情。而开发环境,Java项目改个页面刷新看效果是不需要重启的,即使修改了一些Java类,开发环境也是有自动reload修改过的类的功能的。生产环境也有一些第三方的热部署方案,但我觉得不靠谱,没有折腾的价值。没必要像某些node拥趸那样,凡是node能做的,不管方不方便,都是要取代其它的。

PHP能折腾到安卓又如何?常见的app里有几个用php跑手机上?倒是浏览器套h5的混合方案,不管ios还是android里都不是新闻。而且在政府项目里,现在也有不少要求提供app的,h5在这个特殊的市场是非常主流的,甚至可以跟原生的分庭抗礼。

都是大量做政府项目的公司充分实践反复权衡下来的结果,除了Java,其实.net也有一些。PHP和Ruby甚至Python方案,大家也都试过,长期实践下来才慢慢形成今天这个格局,嘴巴说要和不要,一点儿都不重要,身体很诚实的体现了结果。

非要纠结能不能做,Java还能做CMS呢,Java还能做博客呢,可是有鸟用?这个领域PHP吊打the others。有一些政府项目,其实用什么语言都能做的很好,但是简化技术种类是承包公司很重要的需求之一,为的是人员在多个项目中要可以快速替换,这个时候,选择静态编译型语言,要远比动态类型的脚本更合适。

PHP很好,但在这个行业,他们就是不约而同的选择无视。以上种种分析,并非凭空臆想,而是经历过十几个(有几个是我负责的技术)政府背景项目后,自然而然的跟同行们一样了。

打包

@eechen

Linux下编译打包的事情,从内核裁剪到portable app,单文件app,又能运行又能当lib的so,都玩过。打包个Linux下解压即用的php,的确很简单,我也不会用侵入环境变量的方式做,我用$ORIGIN相对路径。真正花时间的,是兼容性适配,不但要横跨RHEL和SuSE等发行版,还要支持从2007年到2017年十年跨度里的所有版本。Linux我玩的比较熟,要做到这些并不困难,只是花点时间。然而还要把这个事情延伸到windows,然后是AIX和Solaris,之后是各种BSD,耗费大量人力物力。尤其是小型机用的AIX,获取测试环境的成本很高,网上资料也少的多,一般开源C/C++ Lib也很少会在这个系统下做过测试。

政府项目的承包商,开发团队大部分人员薪资不到12K,能少折腾就绝不折腾,越烂大街的选型越好,弄个顽固geek来做技术决策,很快就能把公司玩死。

来源  知乎

转载请注明:XAMPP中文组官网 » 为什么政府项目不管大小,基本都选择java语言,不选择PHP呢?