由于我本身是安全从业者。目前互联网上很多站点还是由PHP驱动的,于是我萌生了学习PHP的想法。
一方面是可以多一个技能,二方面是可以进行代码审计。
但最近的一件事让我放弃了学习PHP。
事情的起因是朋友创业,打算做一个广告发布网站。最开始找到我,我由于时间没空,无法亲自参与到这件事当中来。并且项目功能挺多的,没有大把的业余时间进行开发。
于是朋友在当地找了一家软件公司进行项目的开发。没想到被坑了。
我以前有过两年的Java开发经验,理所应当的就认为PHP和Java差不多,开发按照MVC的模式去编写。前端技术用Jquery,bootstrap等框架,或者是采用前后端分离,后端提供接口,前端用Vue等框架。这是前提。
朋友梳理出来了需求,写了文档,还画了思维导图。在他的一个合伙人的介绍下,把项目承包给了当地的一家软件开发公司,简称A。
A看了我们的需求,说这个没问题,要价2W。也许是因为A是朋友的合伙人介绍的,有熟人的加成。朋友同意了这个价格。
于是,A开始开发这个项目,说要两个月。说是要基于某个系统的二次开发,但保证完成需求。朋友同意了。
两个月后,项目到交付的时候了。A把项目发布上线,给朋友验收。
当时我没在,但根据朋友的说法,一大堆不必要的功能显示在网页上。基于某系统的二次开发,在原功能上新增了功能,但不需要的功能却不去掉。界面看上去也很辣眼睛,输入框和按钮也不对齐,有的是左对齐,有的是右对齐,又有的是居中,而且大小和长度也不一样。网站前台还是二次开发那个系统的默认界面,根本就没有去改。
朋友提出不满意,要求只保留需求文档上的功能,其他功能去掉。网站界面不能用默认的,至少要美化一下,看上去要过得去。
于是A说,一期项目我们只能做到这个地步了,突然冒出来除了这期项目,还有二期项目。于是坐地起价了。还说界面自己找前端改,他已经完成需求了,去掉多余的功能另外加钱。改前端和去掉多余功能很麻烦很困难,要多给钱。
朋友很生气,觉得花2W就搞了个残次品。还因此差点吵起来。朋友觉得,这个项目就好比是一个商品,既然花钱了,就应该能正常使用。最开始合同上也写明了网站要能够满足所有需求,且能正常上线使用。现在的情况,好比朋友说我要造一辆车去拉客做生意。结果A造的却是一辆拖拉机。A违约了吗?没有,拖拉机也是车,既然是车,就能拉客。但是你见过谁做生意是用拖拉机拉客的呢?朋友提出交涉,A说我不管,把拖拉机改成轿车,就得进行二期项目。你要追责,与我无关,我按照约定,给你造了车了。
由于A是熟人介绍的,介绍人还是朋友的合伙人。出于信任,合同上也没有写太多协议。主要内容就只说了网站要能正常上线运营,要能够实现所有需求,后期发现bug要提供技术支持,要免费改好。
按照朋友的说法,是被熟人坑了。A这种是专坑熟人。
经过测试,还发现一些重大的bug。比如后台把账户删了,前台的用户数据还在。还比如普通用户进入后台,改一下url,就能访问超级管理员的页面。
后来朋友去淘宝找了家店铺,把前端改好了,多余的功能去掉了,还加了统计的功能。又花了1W。
朋友说,这个项目前前后后花了3W,仅仅是能用而已。还不敢上线,鬼知道会出现什么问题。网站中还有充值和提现的功能,以A的人品,还不知道会不会加后门。以A的技术实力,还不知道会不会出现bug。
事情就是这样。这几天恰逢元旦,本着新年新开始,所以离职回家闭关三个月,学习一下渗透。打算从甲方去乙方锻炼锻炼攻防技术。上面的事情就是朋友讲给我的事情。
朋友公司几个人,最近自己当测试,在测网站的bug。插入了一些垃圾数据,测试快完毕了,打算上线,但不知道怎么删,后台也有bug导致数据删不掉。于是他们从数据库里面去删,但找不到是哪张表。喊我帮忙看看。
这不看不知道,一看吓一跳。所有表有一百七十多个。交付项目的时候啥都没有。数据表文档没有,代码注释没有。部署文档没有。最终我还是凭借经验,结合表名去猜,试了多次才找到需要删除的数据。问项目开发的人,也不怎么理。
经过阅读代码,我发现项目是基于一个叫微擎的系统开发的。代码结构很乱,看不出来哪些代码是哪些层级,是干什么的,全部代码都无注释。url路由也乱糟糟的,一个首页就四五个参数。
我不得不说,这是典型的一锤子买卖啊。能坑一个是一个。PHP程序员都是做的玩具吗?
源码里全局变量到处都是,为什么就不能像Java一样写一个统一的静态变量类呢?还有变量名叫w,i,c这些是什么鬼?
反观我写Java的时候,代码整整齐齐,变量名全部用全单词的驼峰命名法,一眼就知道这段代码是干嘛的。代码结构上,service,dao,controller,一看就知道代码层级。
后来我给说朋友说,A不像是开发者,代码看上去更像是爱好者。
我相信PHP程序员中,像A这种的人还有很多。果真应了那句话:PHP是世界上最好的语言。
通过这件事,不难看出PHP的圈子,整体开发水平不高。能用的解决方案很多,可以根据很多系统进行二次开发,但这样从而也限制了技术,你无法自己设计架构,需要添加的功能涉及到系统的核心,会很麻烦,这些方面可以体现出做PHP开发没啥技术含量。以至于现在php几乎都是小公司在用,能够写的项目也是小项目。
还有,很多PHP程序员部署项目还用宝塔面板,从这点上看就很low。因为宝塔面板是设计给不懂Linux的人使用的。
作为一个追求技术的人,上述种种原因,导致我放弃了学习PHP。