加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.024zz.com.cn/)- 区块链、CDN、AI行业应用、人脸识别、应用程序!
当前位置: 首页 > 综合聚焦 > 人物访谈 > 专访 > 正文

PHP工程师亲述:三年技术栈悄然重构

发布时间:2026-10-21 11:27:48 所属栏目:专访 来源:DaWei
导读:  去年这时候,我蹲在三号机房改ThinkPHP的中间件链——空调外机哐当响了十八秒,突然停了,接着一股热风直往后颈灌。老张端着泡面进来,筷子戳穿塑料盖,汤漏了一滴在我键盘F键上。我没擦,反正那键早失灵了。  我原以为重

  去年这时候,我蹲在三号机房改ThinkPHP的中间件链——空调外机哐当响了十八秒,突然停了,接着一股热风直往后颈灌。老张端着泡面进来,筷子戳穿塑料盖,汤漏了一滴在我键盘F键上。我没擦,反正那键早失灵了。


  我原以为重构是把laravel换掉,结果发现不是换,是剔。去年拆掉三个微服务模块,今年又砍掉两个队列消费者,上周连composer.lock都删了重生成——就因为一个同事在 Slack 里发了个 emoji:????。他没说话,但我懂。那个包更新日志里写着“已移除对 PHP 7.2 的兼容”,而我们生产环境还在跑 7.3。可这算啥?算技术债?不算。债得有人认领、有账本、有利息。这个只是……过期了。像你抽屉底下发霉的咖啡滤纸,没谁宣布它作废,但它就是不能用了。


  小陈昨天来问我:“Redis Stream 咋接 Laravel Echo?”我反手关了 VS Code,打开个记事本敲了七行纯 PHP——用 stream_select + socket_read 模拟了事件轮询。他盯着看,眉头皱得像刚拆完一箱没说明书的交换机。我没解释 select 的 timeout 参数为啥设 300 毫秒,只说:“你试试。”他试了,崩了。崩得挺干净,没有报错,就是进程悄无声息挂了。我敢打包票,是因为我三天前在测试环境复现过——那天窗外在下雨,雨刮器节奏乱了,左快右慢,和那段代码死循环时 CPU 占用曲线神似。


  优胜劣汰?哈。不是进化论,是拆迁办。没人投票,不搞 RFC,就某个周二下午三点十七分,前端甩过来一个新 UI 包,require 里明晃晃写着 “php: ^8.1”,而我们 Dockerfile 里还挂着 php:7.4-apache。运维老李头都没抬,只回了个句号。三小时后 CI 流水线全绿了,七点我下楼取外卖,美团骑手把袋子递给我时说了句:“您这单超时两分钟,系统自动免单。”我拿着热乎的黄焖鸡,站在玻璃门边看服务器监控面板——那条绿色的 CPU 曲线正往下塌,塌得特别顺滑,塌得像从没被压弯过。


  对了,上个月我去帮隔壁组调 Laravel Octane 内存泄漏,查到一半发现他们 vendor 目录里混着两个版本的 psr/log,一个来自 monolog,一个来自 league/flysystem。我顺手 rm -rf,结果 CI 立刻红了——红得非常标准,连错误码都规整:Exit code 255。但这不重要。重要的是我看见测试负责人王姐接了个电话,一边听一边无意识转圆珠笔,笔帽掉了三次,第三次她没捡,就让它滚进机柜缝隙里了。那缝隙里还卡着去年双十一流量高峰时掉进去的一枚SIM卡,银色的,反光很刺眼。


  所以我说优胜劣汰,真不是吹。就像你不会留着二十年前那台奔腾III笔记本跑 CI,但你会留着它放U盘——不是因为它好,是它恰好能插口。PHP 这三年不是升级,是退潮。退完,礁石全露出来:有的上面长了牡蛎(Swoole),有的裂了缝(Eloquent 的 query builder 被大量 replace 成 raw SQL),还有的底下原来埋着块旧硬盘(Symfony Console 的 Command 类,现在全写成独立 bin/ 脚本了)。我不清楚它们什么时候埋的,也不记得谁埋的。但我知道,硬盘上的 label 是手写的,墨水褪了,只剩“备份-2016-Q3”几个残影。


  不过我昨儿翻旧邮件,发现2021年自己给技术委员会提过一嘴:建议把 PHPUnit 集成测试改成并行跑。当时批注是“风险高,暂缓”。现在倒好了,没人提了——因为大家默认每个 test 文件开头都加了 parallel: true,而且没人记得是哪次提交悄悄加的。这事我说不准。就像我不记得第一次删掉 index.php 入口文件是哪个 commit,只记得那天茶水间咖啡机坏了,修理工来撬面板时哼的是《好运来》副歌部分。


  前两天客户问能不能加个“AI文案助手”按钮,后端要调大模型API。我和前端坐一块儿看需求文档,他手机弹出钉钉消息,低头瞥了一眼,突然说:“诶,他们前端现在用 tRPC 啊?”我没接话。我打开终端敲了三行 curl,直接把 prompt 打进公司自建的 vLLM 接口,返回 JSON 里带个 text 字段,我把字段值丢进 DOM 就完事了。没封装 SDK,没写适配器,没搞类型定义。我就图它返回快——比上次重构用户中心认证逻辑还快。那逻辑我写了三百七十二行,结果上线第三天就被一个 Nginx 配置覆盖了:location /api/v2 { proxy_pass http://auth-gateway; }


文章配图,仅供参考

  现在我电脑右下角任务栏还挂着两个东西:一个是 PHPStorm 侧边栏里深灰色的“PHP Language Level: 8.2”,另一个是 Windows 自带的时钟,秒针跳得有点卡。我懒得修。这卡顿让我想起三年前第一次在本地跑 RoadRunner,也是这样,每四秒顿一下,像呼吸。后来我们换成了 Swoole,再后来干脆把 HTTP Server 层拎出去,让 Nginx+PHP-FPM 只负责处理 .php 结尾的静态路由。再后来……再后来我忘了,只记得某次 deploy 之后,监控告警邮件标题写着“PHP 进程数归零”。我们点了杯奶茶庆祝。


  我下周打算把 config/database.php 里那行 'prefix' => env('DB_PREFIX', 'dev_'), 给删了。就删。不是替换成空字符串,是直接删掉这行。反正所有 migration 里都硬编码了表名,env() 函数调用也早被 IDE 标灰了。至于会不会炸,我不知道。等炸了再说。反正机房空调今天又修好了,嗡嗡声比以前低半度,但还是漏风。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!