Linux PHP开发环境搭建:11年SEO师的极简配置指南
|
跟老板拍桌子那天,我正用 Vim 把 php.ini 里那个 opcache.enable=0 改成 1,手抖多按了个冒号,结果 saveas 成了 php.ini.bak~。老板在会议室门口喊我名字,我回了一句“马上”,顺手把终端最小化——桌面那个没关的录屏还在录,光标在黑框里一闪一闪,像呼吸。 我说极简配置,不是说删掉 xdebug 就叫极简。是去年五月我们上线前夜,后端说“本地跑不通就先提 PR”,结果 merge 的时候他勾选了“Squash and merge”,又手动删了 .gitignore 里 vendor/ 那行,再点提交——三次。我就蹲在他工位右边,看他鼠标悬停在“Confirm merge”上三秒,手指没动,空调出风口在响,对面工程师换了一根黑色编织充电线,Type-C 接口那截铜色发亮。 优胜劣汰不是玄学。是 Docker Compose 里 nginx:alpine 镜像拉下来只要二百一十三 MB,而同事自己编译的 PHP 8.3 + Brotli + ZTS + PCNTL 打包出来六百四十七 MB,启动慢两秒半——这个我敢打包票。但要不要开 Opcache 错误日志?这个我说不准。反正上周五 Lighthouse 跑分截图发到群里,七分钟没人回,PM 在底下打了个“?”然后撤回,我切出去看了眼邮箱,有封标题是“CDN 账单超阈值预警(十二月十六日)”的邮件,附件是 Excel,打开第一列写着“us-east-1-2024Q4”。我没点开。 PHP-FPM 按需启停这事,我原以为得写个 wrapper script 监控 idle,结果发现 systemd 的 `StartLimitIntervalSec=60` 配错之后,它每分钟重启七次,nginx 日志里全是 “connect() to unix:/run/php/php8.3-fpm.sock failed”,而 /var/log/php8.3-fpm.log 里只有一行:“WARNING: [pool www] server reached pm.max_children setting (5), consider raising it”。我改完 reload,前台刚好弹出一个 Chrome 提示:“已阻止此页面自动播放音频”。这提示跟我有啥关系?但它就是弹出来了。 装个 Xdebug?呵。上次给前端搭环境,他非要 latest stable,结果 Xdebug 3.4.1 和 PHP 8.3.12 在 Debian 12 上有个符号版本冲突:libphp8.3.so 引用了 __libc_start_main@GLIBC_2.34,而 Xdebug 编译时链接的是 2.33。不是报错,是静默失效——phpinfo() 里根本不出 xdebug 模块,但 error_log 照常打。我们查了四小时,最后是后端去倒水,回来顺手 rm -rf /tmp/xdebug,重新 pecl install xdebug,选了 3.3.2,成。他拧瓶盖的时候说了句:“早该用 tag 过的。” 数据库呢?别整 MySQL 8.4,默认字符集 utf8mb4_0900_as_cs——你猜 Laravel 迁移会不会在索引长度上卡住?会。但我不配管这个。PM 上午十一点发来文档,标题是《搜索页首屏救火 SOP(v3.2.1-beta)》,里面第三步写着“确认 PHP 未开启 short_open_tag”,我抄起 vim + :%s/short_open_tag = On/short_open_tag = Off/gc,回车,保存,退出,心里默念三遍“这不是我的活”。可这活确实救了首屏:因为某天早上八点十七分,监控告警 LCP 崩到三千五百毫秒,切过去一看,是 header.php 里混进去了 ,而不是 ——短标签开着,Nginx 没配 index.php fallback,直接返回了 PHP 源码文本。三百七十二 KB 的纯文本 HTML,浏览器边下载边解析,FCP 没崩,是 LCP 崩了。谁干的?不重要。重要的是——删掉短标签,加个 location ~ \\.php$ { try_files $uri =404; },重启,告警解除。下午三点二十一分。 Vim 配置也得极简:set mouse=a、syntax on、set number,就这三条。再多一行都算冗余。我见过有人 .vimrc 两千行,还带 tree-sitter 插件,结果连 git diff 的 hunk 折叠都卡顿。他敲 :q! 的时候手腕有点抖。我看见了。 至于 Composer?全局装一次就够了。别信“每个项目独立 vendor 目录更安全”,真出问题,是 autoload_static.php 里那个 class map hash 对不上——你改一行 composer.json,hash 就变,但缓存文件没刷新,require 就报 Class not found。我试过清 composer cache,没用;清 opcache,也没用;最后是 rm -f vendor/autoload.php && composer dump-autoload —optimize --classmap-authoritative。对,就是这条。执行完,terminal 里光标闪了一下,像刚缓过神来。 对了,今天中午十二点零八分,我在公司茶水间煮挂面,水开了溢出来,烧干了锅底。我拿抹布擦灶台的时候想,这和我三年前在杭州租的公寓里那口锅一模一样,锅底也是黑的,只是这里没有房东催水电费。KPI 怎么折算来着?忘了。但我知道,只要 php -v 能吐出 8.3.12,php -m | grep opcache 有回显,curl -I localhost | grep "X-Powered-By" 里不带 cgi/fcgi 字样——这个环境就算活下来了。剩下的,是它自己淘汰自己。
文章配图,仅供参考 我明天上午九点去配个新显示器,HDMI 接口松了,偶尔闪一下蓝屏。不是换,是借运维的备用机调亮度。他们说这台去年十月入库,序列号末四位是 E7K2。我记下了。(编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Linux环境搭建:30分钟搞定生产级配置
无障碍创业:PHP工程师的15年技术跃迁路
PHP服务器安全审计:90%高危漏洞藏于配置末行
Linux无障碍环境搭建:零配置到语音导航全指南
Linux新手避坑指南:13年UI测试工程师实战配置
Linux环境搭建太慢?3步避开90%配置坑
Linux与Windows服务器选型的5大性能陷阱
