在 CentOS 系统中,“启动 PHP”这个操作并非一个单一的命令,其具体方式取决于 PHP 的运行模式,PHP 通常不作为独立的服务运行,而是嵌入在 Web 服务器(如 Nginx 或 Apache)中,或通过 FastCGI 进程管理器(PHP-FPM)来提供服务,理解这些不同的模式是掌握正确启动命令的关键。
PHP-FPM (FastCGI Process Manager) – 主流方式
在现代 Web 架构中,尤其是在与 Nginx 配合使用时,PHP-FPM 是最常见、性能最优的运行模式,PHP-FPM 是一个独立的进程管理器,它负责启动、终止和管理 PHP 的 CGI 进程,Nginx 则将动态请求转发给 PHP-FPM 处理,在这种模式下,我们启动的是 PHP-FPM 服务。
在基于 systemd
的现代 CentOS 版本(如 CentOS 7, 8, 9)中,管理 PHP-FPM 服务的命令非常标准化。
核心命令集
以下是一组用于管理 PHP-FPM 服务的核心命令,服务名可能会根据您安装的 PHP 版本和软件源(如 Remi)有所不同。
启动 PHP-FPM 服务
sudo systemctl start php-fpm
或者,如果安装了特定版本的 PHP(例如从 Remi 仓库安装),命令可能是:
sudo systemctl start php74-php-fpm # 针对 PHP 7.4 sudo systemctl start php81-php-fpm # 针对 PHP 8.1
停止 PHP-FPM 服务
sudo systemctl stop php-fpm
重启 PHP-FPM 服务
当修改了php.ini
或 PHP-FPM 的配置文件(如www.conf
)后,通常需要重启服务以使更改生效。sudo systemctl restart php-fpm
平滑重载配置
与restart
不同,reload
命令会重新加载配置文件,但不会终止正在运行的 worker 进程,从而实现无缝更新,对线上业务影响更小。sudo systemctl reload php-fpm
设置 PHP-FPM 开机自启
为了确保服务器重启后 PHP 服务能自动运行,需要将其设置为开机自启。sudo systemctl enable php-fpm
检查 PHP-FPM 运行状态
这是排查问题时最常用的命令,可以查看服务是否正在运行、监听哪个端口以及最近的日志。sudo systemctl status php-fpm
版本与服务名对应关系
由于 CentOS 官方仓库的 PHP 版本更新较慢,用户常会使用第三方软件源(如 Remi’s Repository)来安装新版本的 PHP,这些软件源通常会为不同版本的 PHP 创建带版本号的服务名,以避免冲突,下表列出了一些常见的对应关系:
PHP 版本 | 常见服务名 | 示例启动命令 |
---|---|---|
PHP 7.4 | php-fpm 或 php74-php-fpm | sudo systemctl start php74-php-fpm |
PHP 8.0 | php80-php-fpm | sudo systemctl start php80-php-fpm |
PHP 8.1 | php81-php-fpm | sudo systemctl start php81-php-fpm |
PHP 8.2 | php82-php-fpm | sudo systemctl start php82-php-fpm |
如果不确定服务名,可以使用 systemctl list-units | grep php-fpm
命令来查找系统中已注册的 PHP-FPM 服务。
Apache (httpd) 模块模式 (mod_php)
在较为传统的 LAMP(Linux, Apache, MySQL, PHP)架构中,PHP 通常以 Apache 的模块形式运行,在这种模式下,PHP 解释器被直接编译或加载到 Apache 服务器进程中,当 Apache 接收到对 .php
文件的请求时,它会内部调用 PHP 模块来处理。
在这种模式下,您不需要单独启动 PHP 服务,您只需要启动 Apache 服务,它就会自动加载并运行 PHP。
核心命令集
启动 Apache 服务(即启动 PHP)
sudo systemctl start httpd
停止 Apache 服务
sudo systemctl stop httpd
重启 Apache 服务
修改了 Apache 或 PHP 的配置后,需要重启 Apache。sudo systemctl restart httpd
设置 Apache 开机自启
sudo systemctl enable httpd
检查 Apache 运行状态
sudo systemctl status httpd
命令行模式 (CLI)
除了作为 Web 服务,PHP 还可以在命令行界面(CLI)中直接执行脚本,这种模式常用于执行后台任务、定时任务或使用 Composer 等工具,这种情况下,不存在“服务”的概念,每次执行都是一个独立的进程。
执行 PHP 脚本
php /path/to/your/script.php
检查 CLI 模式的 PHP 版本
php -v
CLI 模式的 PHP 版本和配置可能与 Web 服务器(PHP-FPM 或 Apache 模块)中使用的版本不同。
相关问答FAQs
问题1:如何确认我的 PHP 是以 FPM 还是 Apache 模块模式运行的?
解答: 最直接可靠的方法是创建一个 phpinfo()
文件,在您的网站根目录下(/var/www/html/
)创建一个名为 info.php
的文件,内容如下:
<?php phpinfo(); ?>
然后通过浏览器访问 http://your_server_ip/info.php
,在打开的页面中,查找 “Server API” 这一项。
- 如果显示 FPM/FastCGI,那么您就是使用 PHP-FPM 模式。
- 如果显示 Apache 2.0 Handler,那么您就是使用 Apache 模块模式。
查看完毕后,为了安全起见,请务必删除此文件。
问题2:systemctl restart
和 systemctl reload
有什么区别?我应该用哪个?
解答: 两者都用于重新应用配置,但工作方式不同。
systemctl restart
:这是一个“硬重启”,它会完全停止服务进程,然后重新启动,在这个过程中,所有当前正在处理的请求(正在执行的 PHP 脚本)都会被中断,这适用于需要完全重置服务状态或reload
不生效的配置更改。systemctl reload
:这是一个“软重载”或“平滑重载”,它会向主服务进程发送一个信号,指示它重新读取配置文件,并使用新的配置启动新的 worker 进程,同时让旧的 worker 进程在处理完手头的工作后自动退出,这个过程不会中断现有的连接,对线上用户几乎无感知。
建议: 在生产环境中,如果您只是修改了 php.ini
或 PHP-FPM 的 www.conf
等配置文件,优先使用 systemctl reload
,只有在 reload
无法解决问题,或者需要应用更底层的重大更改时,才使用 systemctl restart
。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复