Linux下PHP开发环境搭建实战指南
|
去年五月,后台里出状况那一刻——PHP 报错页面直接吐了张雪白的 fatal error,堆栈里连 composer autoloader 都没影儿,我盯着终端那行 php: command not found 时,手还悬在键盘上没敲出 which php,就听见隔壁工位小王“噗”一声把咖啡喷到显示器边框上:“你又没装?” 我原以为用系统包管理器 apt 装个 php 就能开干,结果装完发现 php -v 是 7.4,而项目 composer.json 里明晃晃写着 “^8.1”,我顺手敲 apt install php8.1,它回我:“E: Unable to locate package php8.1”——不是拼错了,是 Ubuntu 20.04 默认源压根不带。我又去 add-apt-repository ppa:ondrej/php,手抖多敲了个空格,回车后提示“repository not found”,但没报错,就卡着,光标不动。等了十七秒,才意识到得先 apt update,可这时候群里已经炸了:SEO 那边的人甩来截图,说我们测环境的 nginx 日志里全是 502,问我“是不是又动了反向代理配置”,我回他“还没配 nginx”,他回我“哦”,再没下文。 窗外天已经黑了,路灯一盏接一盏亮起来,像我们上周删掉的那批伪原创测试用例——根本跑不通,还占内存。我切回终端,试了三种方式装 PHP:ppa 源、编译安装、docker run --rm -it php:8.1-cli。最后选了第一个,因为第二个要装 autoconf/m4/libxml2-dev 这一堆,第三个……启动都慢,debug 时改个 echo 都要 rebuild。说实话,我偷懒了,真不想再碰 ./configure —prefix=/opt/php81 —with-fpm-user=www-data 这类玩意儿,上次编译失败还是因为忘记 make clean,残留的 .o 文件和新版 openssl 冲突,报错信息里混着中文乱码,硬是盯了四十三分钟才看出是 openssl 版本号后面少了个冒号。 其实最烦的不是装 PHP,是它赖着不走。某天晨会刚散,主编路过我桌边看一眼终端,问:“本地环境跑通没?”我说“通了”,他点点头走了,三分钟后我执行 php -m | grep gd,空白。再查 phpinfo(),GD 扩展显示 disabled。翻 configure 参数,才发现 —with-gd 默认只认系统自带 libjpeg,但我们服务器上装的是 jpeg9d,路径在 /usr/local/include/jpeglib.h,而 configure 脚本在 /usr/include 下死磕。我骂了句脏话,顺手 rm -rf /tmp/php-src,重新 clone,加 —with-jpeg-dir=/usr/local,make -j$(nproc),然后等——这次编译成功了,可启动 php-fpm 时提示 socket connect refused,查了半天,是 systemd 的 php8.1-fpm.service 文件里 User=www-data 权限不够,不能写 /run/php/php8.1-fpm.sock,改完 reload,又忘了 chmod 755 /run/php。我对着 chmod 权限表发了两分钟呆,想起来上周五吃饭时隔壁组说他们用 ansible-playbook 一把梭,但我点开他们的 GitHub,发现 playbook 里有一行注释:# TODO: fix SELinux context for php-fpm socket, current skip。 饮水机没水了。我起身接水时路过茶水间,看见实习生正用 VS Code Remote-SSH 连测试机,窗口右下角还飘着“PHP Language Server initializing…”。我心想这比我自己搭快多了,可转念一想,他们那边连 xdebug 都没配对——断点下了,IDE 不停,log 里只写 “connection timed out”,后来发现是 iptables 拦了 9003 端口,但规则链里有二十多条,他们删错了三条,导致线上监控告警了一整天。我回来坐下,终端还停在 sudo service php8.1-fpm restart 的等待状态,光标在闪,没反应。我又敲一遍,还是没反应。Ctrl+C 强退,再敲,突然跳出 “Failed to restart php8.1-fpm.service: Unit php8.1-fpm.service not found.”——刚才明明启过一次,systemctl list-units | grep php 还看到过。我怀疑自己记忆错乱,重启了 terminal,再查,发现服务名其实是 php8.1-fpm.service,但 deb 包装出来的是 php8.1-fpm。我搜了下文档,才发现是 Debian 衍生版的命名骚操作:Ubuntu 去掉了中间的横线,而 .service 文件里写的又是带横线的……靠。 说白了,“Linux 下 PHP 开发环境搭建实战指南”能活下来,就靠优胜劣汰。不是它多高明,是别的方案更烂:Windows WSL2 启动慢、macOS M1 编译 extension 一报错就是 llvm 和 arm64 架构对不上、Docker 在 Jenkins 上构建时 cache 失效概率高到反人类。我们删过三轮搭建教程,第一轮砍掉所有“从零开始 wget 源码”的章节,第二轮干掉“如何在 CentOS 6 上装 PHP 7.0”的段落(谁还在用 CentOS 6?),第三轮直接把“配置 Vim PHP 自动补全”整节拖进回收站——现在谁还手写 vimrc?装插件都懒得看文档,点几下鼠标的事。剩下这篇之所以还挂着,是因为上个月运营组要上线一个活动页,前端拿 Laravel 写接口,后端提测前一天,测试环境里 var_dump($_GET) 居然输出 NULL,查了俩钟头,发现是 nginx 的 fastcgi_param SCRIPT_FILENAME 设置错了路径,而错误示例就藏在这篇指南的“常见陷阱”第 4.2 小节里。虽然那节我写的时候压根没验证过……但至少撞上了。
文章配图,仅供参考 对了,中午吃的麻辣烫,老板新换了汤底,辣得我胃疼。下午两点开始改这篇稿子的标题,纠结了七分钟。“Linux 下 PHP 开发环境搭建实战指南”太长,“Linux+PHP 环境速成”太假,“一行命令搞定 PHP”纯属胡扯……最后还是用了原来的,反正 SEO 那边说收录量不少,具体多少?记不清了。群里谁又发了张截图,是另一个栏目在测灰度发布漏斗,数据曲线歪得像喝醉的蜈蚣。我看了一眼,关掉。 明天还得接着发,需求方说新项目要兼容 PHP 8.3,我查了眼官方下载页,.tar.gz 包刚更新两天,还没进 ppa 源。我已经打开浏览器准备下源码了,但想了想,先去点了杯美式。终端还开着,里面 git clone 刚进行到 37%,进度条卡在那儿,像我上个月的考勤——迟到三次,补卡两次,一次忘打卡,人事那边催过两回,我没回。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Linux无障碍环境搭建:零配置到语音导航
Linux深度学习环境搭建:14年运维的排障实录
Windows运行库高效管理:构建稳定微服务开发环境
嵌入式Linux开发者Unix环境搭建避坑指南
无障碍设计失灵?PHP后端破局:动态跨界整合
PHP电商开发者转向Go/Python/Rust,Laravel渐退潮
PHP建站避坑:9年容器运维揭秘框架选型真相
