|
我电脑里躺着二十多个PHP小工具,全是自己写的。不是框架,不是CMS,就是那种单个文件、几百行代码、解决一个具体问题的破烂玩意儿。但说实话,它们比很多花里胡哨的商业软件好用得多。 拿最近写的一个日志分析工具来说。服务器每天产生几十MB的Nginx日志,之前排查问题都是grep加awk凑合,遇到稍微复杂点的需求就得写一堆管道命令,改来改去还容易出错。后来花了一个下午写了个PHP脚本,直接读日志文件,解析成数组,按IP、按URL、按状态码分组统计,还能输出成HTML表格。丑是丑了点,但管用。而且因为跑了PHP内置的web服务器,浏览器打开就能看,不用装任何额外环境。 这类工具的典型特征就是"糙快猛"。不讲究设计模式,不搞依赖注入,甚至不用composer。一个文件搞定,函数往下堆,变量名随便起,能用就行。反正就自己用,没人会来review你的代码。但恰恰是这种没包袱的写法,反而让解决问题的思路变得特别直接。你脑子里怎么想的,代码就怎么写,中间没有框架那一层翻译损耗。 有人会问,Python脚本不也能干这活儿?确实能。但PHP有个优势——它对Web操作的支持太顺手了。处理表单提交、操作Cookie、做简单的HTTP请求,PHP的语法几乎是零门槛。我写过一个小工具,专门批量抓取某个内部系统的数据。用Python写的话得研究requests库的会话保持,用PHP就直接开curl扩展,三行代码搞定cookie处理。再加上PHP的数组函数是真的丰富,array_column、array_group_by这种高频操作都有现成的,处理半结构化数据特别顺手。 当然,这些工具也翻过车。有一回写了个批量图片压缩脚本,没注意内存限制,处理到第50张图的时候直接内存爆掉。后来学乖了,处理大文件的时候手动调一下ini_set('memory_limit', '512M'),或者干脆用生成器逐行读取。这类坑踩多了,反而对PHP的资源管理机制有了更深的理解——它虽然比不上C那么精细,但比你想的要灵活得多。 我观察到一个现象:现在不少年轻程序员一提PHP就皱眉头,觉得这语言土、老、不优雅。但真到干活的时候,他们又偷偷用PHP写点小脚本解决问题。这种分裂很有意思。其实语言本身没有高下之分,关键看你拿它干什么。你要是让我用PHP写个高并发的长连接服务,我肯定跟你急;但要是处理个文本、抓个网页、做个内部小后台,PHP的效率是真的能打。 这些工具还有个共同点——它们都带着明显的个人使用习惯。比如我的工具文件头一律写着"By Wang, don't ask questions",因为知道这些代码只有我自己能看懂。有个工具的命名叫"fix_all.php",实际上它只修一种特定的数据错乱问题,但我懒得改名。这种个人色彩浓厚的代码,反而成了我工作流里最顺手的一部分。 说到底,工具的价值在于解决问题,不在于技术含量高低。那些躺在服务器角落里的小PHP脚本,可能没人会为它们写文档,也没人给它们拍彩虹屁,但它们确确实实在每天跑着,处理着那些看似不起眼却让人头疼的杂活。这大概就是实用主义编程的乐趣——不追求完美,只追求好用。 |