ubuntu 安装 php 应优先使用 apt,避免源码编译;默认版本由系统发行版锁定(如22.04为8.1、24.04为8.3),推荐匹配系统版本以保障兼容性与稳定性。

Ubuntu 怎么装 PHP:直接用 apt 就行,别碰源码编译
Ubuntu 官方仓库的 PHP 版本够用,apt 安装快、依赖自动解决、升级有保障。除非你要 PHP 8.4(还没进主源)或必须打特定补丁,否则源码编译纯属给自己加戏,还容易和 apache2 或 nginx 的模块路径对不上。
常见错误现象:php -v 报错“command not found”,其实是只装了 php-cli 但漏了核心包;或者装完 php-fpm 却没启动,导致 Nginx 502。
- 先更新索引:
sudo apt update - 装运行时 + CLI + 常用扩展:
sudo apt install php php-cli php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip - 检查版本:
php -v(通常 Ubuntu 22.04 是 PHP 8.1,24.04 是 8.3)
PHP 版本选哪个:看 Ubuntu 发行版,不是看教程年份
Ubuntu 不会滚动更新 PHP 主版本——22.04 锁死在 8.1,24.04 锁死在 8.3。你搜到的“Ubuntu 安装 PHP 8.2”教程,大概率是手动加第三方源(如 ondrej/php),这会带来兼容风险:比如某天 apt upgrade 拉进一个和系统 Apache 冲突的 libapache2-mod-php 更新。
使用场景:开发环境可妥协,生产环境建议严格匹配系统默认版本,省去版本对齐成本。
- 查当前源支持的 PHP 版本:
apt list php* - 想换版本?优先考虑换 Ubuntu 小版本(如从 22.04 升到 24.04),而不是硬塞新版 PHP
- 若真要新版,只加
ondrej/php源,并立刻sudo apt install php8.2显式指定,避免隐式覆盖
php-fpm 启不起来?八成是端口或用户配置没改
php-fpm 默认监听 127.0.0.1:9000,但 Ubuntu 的配置文件分两层:全局 /etc/php/*/fpm/pool.d/www.conf 控制进程用户和监听地址,而 /etc/php/*/fpm/php-fpm.conf 只管主服务开关。很多人改了后者以为搞定,其实关键参数在前者里。
错误现象:systemctl status php*-fpm 显示 active (running),但 Nginx 访问返回 502;或日志里反复出现 connect() to 127.0.0.1:9000 failed。
- 确认监听方式:
grep -E "listen =|user =" /etc/php/*/fpm/pool.d/www.conf - 如果 Nginx 和 PHP-FPM 同机,推荐改用 Unix socket(更快更安全):
listen = /run/php/php*-fpm.sock,再改 Nginx 的fastcgi_pass对应路径 - 注意 socket 文件权限:
listen.owner和listen.group必须和 Nginx worker 进程用户一致(通常是www-data)
装完 PHP 扩展没生效?extension= 不是万能钥匙
Ubuntu 下多数扩展(如 mysqli、pdo_mysql)装完就自动启用,因为 apt 会写好 /etc/php/*/mods-available/*.ini 并在对应 SAPI 目录下建软链。手动加 extension=xxx.so 到 php.ini 反而容易重复加载、报 Cannot load module 错误。
性能影响:乱启扩展会拖慢 PHP 启动,尤其 opcache 开关不当会导致脚本缓存失效或内存溢出。
- 查已启用扩展:
php -m | grep mysql(CLI)或phpinfo()(Web) - 启/禁扩展统一用
phpenmod/phpdismod:sudo phpenmod opcache - 改完记得重启服务:
sudo systemctl restart php*-fpm(CLI 不用重启,但 Web 请求需要)
最容易被忽略的是:不同 SAPI(CLI/FPM/Apache)的配置目录完全独立,php -m 看的是 CLI 配置,网页里跑的是 FPM 配置,别拿一个环境的结果去推另一个。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











