PHP不是装上就能运行Web的独立命令,必须与Web服务器、php-fpm进程管理器及扩展模块协同工作;仅执行apt/yum install php仅安装CLI版本,不包含php-fpm,也无法让Nginx/Apache解析PHP文件。

php 不是装上就能跑 Web 的单个命令,它必须和 Web 服务器、进程管理器、扩展模块协同工作。直接运行 sudo apt install php 或 sudo yum install php 只能装个 CLI 版本,连 php-fpm 都不带,更别说让 Nginx/Apache 解析 .php 文件。
确认你用的是哪个发行版和包管理器
不同系统安装路径差异很大,混用命令会失败:
- Ubuntu/Debian → 用
apt,PHP 包名是php、php-fpm,默认装的是最新稳定版(如 8.3) - CentOS/RHEL 7 → 用
yum,必须先装epel-release,否则只有老旧的 PHP 5.4 - CentOS/RHEL 8+ / Rocky / AlmaLinux → 用
dnf,PHP 是模块化设计:dnf module list php才能看到可选版本(7.4/8.0/8.1/8.2),得先dnf module enable php:8.2再dnf install php-fpm - Ubuntu 新版(22.04+)若要 PHP 8.2/8.3,推荐加 Ondřej Surý 的 PPA:
sudo add-apt-repository ppa:ondrej/php,否则官方源只提供 8.1
别漏掉 php-fpm —— 它不是可选组件
Nginx 不认识 mod_php,Apache 在新版中也默认不启用该模块。现代部署基本都走 FastCGI,靠 php-fpm 管理 PHP 进程。只装 php 包,php-fpm 很可能没装,服务也起不来。
实操建议:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- Ubuntu/Debian:装
php-fpm而不是libapache2-mod-php(除非你明确用 Apache + mod_php) - CentOS/RHEL 8+:
dnf install php-fpm必须跟php一起装,且注意用户组权限 —— 默认www-data在 RHEL 系里不存在,得改成apache或nginx - 启动后检查监听:
sudo ss -tlnp | grep :9000,看到php-fpm占着127.0.0.1:9000或/run/php/php8.2-fpm.sock才算活了
扩展不是“装完就生效”,得看 php.ini 加载顺序
php -m 显示已加载模块,不代表它们真的可用。常见坑:
立即学习“PHP免费学习笔记(深入)”;
-
php-mysql在 Ubuntu 上实际对应mysqli和pdo_mysql,但php -m | grep mysql可能只显示mysqlnd—— 这是驱动,不是扩展名 - RHEL/CentOS 用
php-mysqlnd,不是php-mysql;装错名字,extension=mysqli.so就会报 “unable to load dynamic library” - 配置文件分散:
php --ini输出的路径里,/etc/php/8.2/cli/php.ini和/etc/php/8.2/fpm/php.ini是两套,改错地方等于没改 - 修改
php.ini后,CLI 模式生效,但 FPM 不生效 —— 必须sudo systemctl restart php8.2-fpm,不是restart apache2或nginx
验证不能只靠 php -v,得测真实请求链路
php -v 成功 ≠ Web 能跑 .php。必须走完整链路:
- 写一个
/var/www/html/info.php,内容是<?php phpinfo(); ?> - 如果是 Nginx,确认
location ~ \.php$块里fastcgi_pass指向正确 socket 或地址(unix:/run/php/php8.2-fpm.sock或127.0.0.1:9000) - 如果是 Apache,确认
a2enmod proxy_fcgi setenvif和a2enconf php8.2-fpm已执行,且ProxyPassMatch规则存在 - 访问页面时返回 502,大概率是
php-fpm没起来,或 socket 权限不对(www-data用户无法读/run/php/php8.2-fpm.sock)
php-fpm 的用户组、Nginx 的 worker 进程用户、socket 文件权限、php.ini 加载路径 —— 四个点只要一个不匹配,502 Bad Gateway 就稳稳等着你。


















