在 CentOS 系统中,“启动 PHP”这一操作并非一个单一的命令,其具体执行方式高度依赖于 PHP 的运行模式,PHP 通常不作为一个独立的服务直接暴露给用户,而是嵌入在 Web 服务器(如 Apache 或 Nginx)中,或者通过 PHP-FPM(FastCGI Process Manager)作为独立的进程池来处理动态请求,理解其背后的架构是掌握正确启动命令的关键。

PHP-FPM 方式:现代 Web 环境的首选
PHP-FPM 是目前最流行且性能优异的 PHP 运行模式,尤其与 Nginx 配合使用,但同样适用于 Apache,它将 PHP 解释器作为一个独立的守护进程运行,通过 FastCGI 协议与 Web 服务器通信,这种方式的优势在于进程管理更灵活、性能更高,且可以与 Web 服务器分离部署。
在 CentOS 中,管理 PHP-FPM 服务主要使用 systemctl(CentOS 7+)或 service(CentOS 6 及更早版本)命令,服务名称通常会包含 PHP 的版本号,以支持多版本共存。
使用 systemctl (CentOS 7 / 8 / Stream / Rocky Linux / AlmaLinux)
这是现代 CentOS 系统的标准方法。
-
启动 PHP-FPM 服务
sudo systemctl start php-fpm
或者,如果安装了特定版本(例如通过 Remi 仓库安装的 PHP 8.1):
sudo systemctl start php81-php-fpm
-
设置开机自启
sudo systemctl enable php-fpm
-
停止服务
sudo systemctl stop php-fpm
-
重启服务(推荐在修改配置后使用)
sudo systemctl restart php-fpm
-
重新加载配置(优雅地重启,不中断现有连接)
sudo systemctl reload php-fpm
-
查看服务状态
sudo systemctl status php-fpm
使用 service (CentOS 6)
对于仍在使用旧版 CentOS 的用户,service 命令是标准。
-
启动服务
sudo service php-fpm start
-
设置开机自启

sudo chkconfig php-fpm on
为了更清晰地展示不同版本下的命令差异,可以参考下表:
| CentOS 版本 | 管理命令 | 启动命令示例 | 服务名示例 | 说明 |
|---|---|---|---|---|
| 7 / 8 / Stream | systemctl |
sudo systemctl start php-fpm |
php-fpm, php81-php-fpm |
现代标准,功能强大,支持服务依赖管理 |
| 6 | service |
sudo service php-fpm start |
php-fpm |
传统命令,适用于较旧的系统 |
注意:确切的 服务名 可能因安装方式(如 YUM 默认仓库、Remi 仓库、SCL)和 PHP 版本而异,如果不确定,可以使用 systemctl list-units | grep php-fpm 或 service --status-all | grep php-fpm 来查找正确的服务名称。
Apache 模块方式:经典集成方案
在较为传统的配置中,PHP 可能以模块的形式直接编译进 Apache(mod_php)或作为共享模块被加载,在这种模式下,PHP 的生命周期完全由 Apache 服务管理,用户无需也无需直接“启动 PHP”,只需启动 Apache 服务即可。
当 Apache 启动时,它会加载 mod_php 模块,该模块会内嵌 PHP 解释器,准备好解析 .php 文件。
使用 systemctl (CentOS 7+)
-
启动 Apache(并间接启动 PHP)
sudo systemctl start httpd
-
设置开机自启
sudo systemctl enable httpd
-
重启 Apache(修改 PHP 配置如
php.ini后需要)sudo systemctl restart httpd
使用 service (CentOS 6)
-
启动 Apache
sudo service httpd start
-
设置开机自启
sudo chkconfig httpd on
要验证 PHP 是否已作为 Apache 模块加载,可以创建一个包含 <?php phpinfo(); ?> 的 PHP 文件,通过浏览器访问,查看 "Server API" 项是否为 "Apache 2.0 Handler",或者在服务器上执行 httpd -M | grep php。
验证与故障排查:确保 PHP 正常运行
无论采用哪种方式,启动服务后,验证其是否正常工作至关重要。
-
检查服务状态:使用
systemctl status php-fpm或systemctl status httpd查看服务是否处于active (running)状态,如果失败,输出信息通常会提供错误原因。 -
查看日志文件:日志是诊断问题的首要工具。

- PHP-FPM 日志:通常位于
/var/log/php-fpm/目录下,如www-error.log。 - Apache/Nginx 错误日志:通常位于
/var/log/httpd/error_log或/var/log/nginx/error.log。
- PHP-FPM 日志:通常位于
-
检查端口或套接字:PHP-FPM 默认监听 127.0.0.1:9000 端口或一个 Unix 套接字,可以使用
netstat或ss命令确认。sudo ss -tlnp | grep :9000 # 或查看套接字 sudo ss -tlnp | grep php-fpm.sock
Web 服务器(如 Nginx)无法连接到 PHP-FPM,通常是因为这里的配置不匹配或防火墙阻止了连接。
-
测试配置文件语法:在重启服务前,最好先测试配置文件语法是否正确。
- PHP-FPM:
php-fpm -t - Nginx:
nginx -t - Apache:
httpd -t
- PHP-FPM:
在 CentOS 中启动 PHP 的核心是启动其“管理者”——无论是 PHP-FPM 服务还是 Apache 服务,理解您的部署架构,选择正确的命令,并结合状态检查和日志分析,是确保 PHP 应用稳定运行的基础。
相关问答
问:我已经执行了 systemctl start php-fpm,并且显示服务正在运行,但我的 PHP 网站仍然显示 502 Bad Gateway 错误,这是为什么?
答: 这是一个非常常见的问题,502 Bad Gateway 错误通常意味着 Web 服务器(如 Nginx)作为网关,无法从上游服务(PHP-FPM)获得有效的响应,即使 PHP-FPM 服务本身在运行,也可能存在以下问题:
- 配置不匹配:检查 Nginx 的配置文件(通常在
/etc/nginx/nginx.conf或/etc/nginx/conf.d/目录下),确保fastcgi_pass指令指向的地址和端口(如0.0.1:9000)与 PHP-FPM 配置文件(/etc/php-fpm.d/www.conf)中listen指令设置的地址和端口完全一致。 - 权限问题:PHP-FPM 进程的运行用户(如
apache或nginx)可能没有足够的权限执行网站目录下的 PHP 文件,或者没有权限写入会话、上传等临时目录,请检查文件和目录的权限(chown和chmod)。 - SELinux 限制:CentOS 默认开启的 SELinux 可能会阻止 Nginx 连接到 PHP-FPM 的网络端口或套接字,可以临时关闭 SELinux(
setenforce 0)测试是否为此原因,如果是,需要设置正确的 SELinux 策略,setsebool -P httpd_can_network_connect 1。 - 防火墙:虽然 PHP-FPM 通常监听本地回环地址(127.0.0.1),不受防火墙影响,但如果配置为监听所有 IP(如
0.0.0:9000),则需要确保防火墙(如firewalld)允许该端口的流量。
问:我需要在同一台服务器上同时运行 PHP 7.4 和 PHP 8.1 的项目,应该如何管理和启动它们?
答: 在 CentOS 上实现多版本 PHP 共存,最佳实践是使用 PHP-FPM 模式,并借助 Remi 或 SCL (Software Collections) 这样的第三方仓库,这些仓库在安装不同版本的 PHP 时,会将其安装到独立的目录中,并创建独立的 systemd 服务。 通过 Remi 仓库安装 PHP 7.4 和 8.1 后,你可能会得到以下服务:
php74-php-fpmphp81-php-fpm
它们会监听不同的端口或套接字,
- PHP 7.4 监听
0.0.1:9000 - PHP 8.1 监听
0.0.1:9001
启动和管理它们时,你需要明确指定服务名:
# 启动 PHP 7.4 FPM sudo systemctl start php74-php-fpm sudo systemctl enable php74-php-fpm # 启动 PHP 8.1 FPM sudo systemctl start php81-php-fpm sudo systemctl enable php81-php-fpm
在你的 Nginx 或 Apache 虚拟主机配置中,根据项目所需的 PHP 版本,将请求转发到对应的端口或套接字即可,这样,两个版本的 PHP 服务可以独立运行、互不干扰。