Linux PHP开发环境搭建:零基础实战指南
|
跟人吵架。昨晚在 Slack #php-dev 频道吵到十二点十七分,起因是有人把“零基础实战指南”当真了——发了个 `curl -sS https://getcomposer.org/installer | php` 就截图说“环境搭好了”。我回了个“你连 /etc/hosts 都没碰过,搭个屁”,他立刻甩来一个微信截图:群里三个新人正跟着那个教程配 Xdebug,全卡在 `xdebug.mode=debug` 之后连不上 PHPStorm。我就顺手关了显示器灯,工位右上角那盒没拆封的青花椒牛肉面还印着“已过期七天”。 先扔结论后补细节。这本指南真正的价值不在教你怎么装,而在逼你当场淘汰掉三类人:一类是看到 `apt install php8.2-fpm` 就以为完事的,一类是把 `.env.example` 改成 `.env` 就觉得配置完了的,还有一类……算了,这类人昨天在 GitLab CI 流水线里写了 `chmod 777 storage/`,现在还在等审核通过。我敢打包票:凡是通读并实操完第一章“LAMP 基础组件验证”的,至少能自己看懂 nginx error log 里 `connect() failed (111: Connection refused)` 是哪条 upstream 挂了;但凡抄完第二章“Composer 全局路径切换”的,八成已经把 `~/.composer/vendor/bin` 加进 PATH 了——这个我敢打包票,因为昨天老张在我背后看了三分钟,伸手按了我键盘上的 `Ctrl+R`,说“你这 shell history 刷得比监控报警还勤”。 监控又跳了一条报警:PHP-FPM 的 pm.max_children = 50,但 QPS 超过四十三就夯住。不是指南的问题——它压根没提这个值怎么算,也没提 `pm.status_path` 要怎么配才能 curl 出来实时进程数。但它把 `systemctl restart php8.2-fpm` 这行命令,跟 `sudo chown -R www-data:www-data /var/www/html` 并排写在同一个代码块里,中间只隔了一个空行。就这一空行,害我同事小陈在测试服跑了两轮 `tail -f /var/log/php8.2-fpm.log` 才发现他 `chown` 的目录其实是 `/var/www/html/public`,而入口文件 index.php 早被他删了重拉——删之前他顺手把 `.gitignore` 里的 `/storage/` 改成了 `/storage//`,现在每次 `git status` 都要卡十八秒。我原以为他只是手抖,结果翻他 VS Code 窗口,右下角状态栏明晃晃显示着 “PHP Intelephense: indexing paused (low memory)”。 反常识结论:它不教你怎么选。Apache vs Nginx?它说“新手建议 Nginx”,然后给了一段带 `fastcgi_pass unix:/run/php/php8.2-fpm.sock;` 的 server 块。PDO vs MySQLi?它只列了一行 `php -m | grep pdo`,后面紧跟 `extension=pdo_mysql.so` ——可你猜怎么着?我在阿里云 ECS 上跑完全一样命令,输出里压根没有 pdo,但 `php --ini` 显示配置文件路径是 `/etc/php/8.2/cli/php.ini`,而 `phpinfo()` 里加载的是 `/etc/php/8.2/fpm/php.ini`。这个我说不准。小林在群里@了我,问:“`/etc/php/8.2/cli/php.ini` 和 `/etc/php/8.2/fpm/php.ini` 是不是同一份?”我回他:“不是。但你别管是不是,你只要知道 `php -v` 看的是 CLI 的,`curl http://localhost` 走的是 FPM 的。”他回了个捂脸笑表情包,尺寸 128×128,像素有点糊。我没点开看。
文章配图,仅供参考 优胜劣汰。这个词不是修辞。是你在第十一行命令 `wget https://github.com/laravel/laravel/archive/refs/tags/v11.0.0.tar.gz` 卡住十分钟后,必须决定要不要换镜像源、要不要改 DNS、要不要查 `wget --no-check-certificate` 能不能过防火墙——这时候没文档告诉你,只有 `man wget` 里那段没人读的 OPTIONS 说明,和你自己记在 Evernote 里“去年备案用过的杭州机房 DNS 是 114.114.114.114”。对了,工位对面阿哲刚接完电话,骂了句“CDN 缓存刷不透还怪源站”,顺手把半瓶冰红茶搁我显示器支架上,瓶身水珠滴到我键盘的 Enter 键帽缝里了。我敲了三次才响。昨天下午三点零六分,我试了指南里写的“一键部署 Laravel Mix”——`npm install && npm run dev`。Node.js 版本是 v20.12.0,Ubuntu 是 24.04,`node_modules/.bin/cross-env` 权限 644。报错信息是 `Error: EACCES: permission denied, open '/tmp/mix-manifest.json'`。指南没提 `umask`,更没提 `npm config set prefix ~/.local`。但我记得老张上周说过,他公司在佛山IDC的机器上,`/tmp` 是挂的 tmpfs,`chown` 会直接失败。这事我不打算验证了。太费劲。 碎片拼起来。小陈最后没装成功,但他用 `docker run --rm -v $(pwd):/app -w /app php:8.2-cli php -v` 跑通了第一条命令。阿哲在他旁边摇头:“容器里跑开发环境?你本地 .env 文件加密字段怎么测?”小陈低头切回终端,敲了 `cat .env | grep APP_KEY`,光标停在第三行不动。窗外有辆叉车在运 SSD 机柜,铁链哗啦一响,震得我桌角的机械键盘支架嗡嗡颤了半秒。我原以为他会再试一遍,结果他点了浏览器刷新按钮,然后打开新标签页搜“laravel APP_KEY 生成在线工具”。这个我说不准。我也没拦。 下一步?我把 PDF 发给了备案组老王,附言:“这本指南,适合让备案组初筛时,一眼看出谁该退群重学”。他回了个 OK 手势。没加标点。我也没加。青花椒牛肉面盒子边沿翘起来了,露出里面印的生产日期:“2025年08月19日”。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


PHP调试总卡壳?90%新手忽略的3个断点技巧
Linux与Windows服务器选型的5大性能陷阱
Linux环境搭建太慢?3步避开90%配置坑
PHP安全编码三大致命坑:90%站长都踩过
VR工程师转PHP:三天调试实战通关
PHP架构师私藏调试心法:3行代码秒定90%线上故障
Linux无障碍环境搭建:16年UX经验实战指南