如何在 CentOS8
中搭建 PHP
环境,不二博客的 CentOS8 搭建 PHP 环境 这篇文章中已经详细的介绍了,这篇文章主要介绍如何搭建 PHP
多版本共存的环境。起因是这样的,朋友的一个项目出了点问题,让我帮忙去看看,然后甩给我一个宝塔地址还有服务器的一些用户信息。因为我根本用不惯这些操作面板,所以直接用 SSH
连接服务器,直接肝了。但是在使用 composer
安装组件时遇到了 PHP
版本问题,一番查找下,发现这台服务器上是 PHP
多版本共存的。这引起了我挺大的兴趣,因为多版本 PHP
共存的需求还是挺多的,查看了宝塔的实现方式后,自己在虚拟机中一顿操作,也实现了 PHP
多版本共存,在此记录一下。
因为个人很喜欢用
oh-my-zsh
所以所有的设置都是在~/.zshrc
中,如果不使用zsh
的话,把~/.zshrc
换成~/.bashrc
即可!
安装多版本 PHP
在 CentOS8 搭建 PHP 环境 文章中提到的安装 PHP
的方式是安装单版本的,且安装后就是系统默认的,不过安装多版本时,要稍微变下。
# 安装PHP8.1
dnf install -y php81
# 安装PHP7.4
dnf install -y php74
安装成功后,我们在终端中执行
php -v
会提示没有 php
这个指令,要正确使用 php
指令必须带上版本号
php81 -v
php74 -v
如果觉得这样太麻烦的话,设置一下默认版本即可
vim ~/.zshrc
添加以下内容
# 设置 cli 模式下,默认的 PHP 的版本是 8.1
source /opt/remi/php81/enable
重新加载 ~/.zshrc
source ~/.zshrc
安装扩展
# 安装 PHP 8.1 的扩展
dnf install -y php81-php-{fpm,bcmath,curl,gd,mysqlnd,pdo,opcache,zip,devel,intl,zlib,mbstring,simplexml,json,dom,openssl}
# 安装 PHP 7.4 的扩展
dnf install -y php74-php-{fpm,bcmath,curl,gd,mysqlnd,pdo,opcache,zip,devel,intl,zlib,mbstring,simplexml,json,dom,openssl}
修改 php-fpm 配置文件,将 apache 修改为 nginx
# PHP 8.1 的 www.conf 的路径
vim /etc/opt/remi/php81/php-fpm.d/www.conf
# PHP 7.4 的 www.conf 的路径
vim /etc/opt/remi/php74/php-fpm.d/www.conf
user = nginx
group = nginx
启动 php-fpm 并设置开机自启动
# 启动 PHP 8.1 的 php-fpm
systemctl enable php81-php-fpm --now
# 启动 PHP 7.4 的 php-fpm
systemctl enable php74-php-fpm --now
如果出现 502 问题,是因为 Nginx
链接 sock
文件无权限。
# PHP 8.1 的 www.conf 的路径
vim /etc/opt/remi/php81/php-fpm.d/www.conf
# PHP 7.4 的 www.conf 的路径
vim /etc/opt/remi/php74/php-fpm.d/www.conf
listen.owner = nginx
listen.group = nginx
listen.mode = 0666
安装 redis 和 swoole 扩展
从 EPEL 存储库安装 php-pecl-redis 包:
参考文档:https://github.com/phpredis/phpredis/blob/develop/INSTALL.markdown#rhel--centos
dnf install php81-php-pecl-redis -y
dnf install php81-php-pecl-swoole -y
查看 PHP 扩展信息
php --ri 扩展名
Nginx 站点配置文件
只要修改以下 www.sock
文件地址就行了
# fastcgi_pass 设置成自己需要的 PHP 版本即可
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/opt/remi/php81/run/php-fpm/www.sock;
include fastcgi_params;
}
查看 www.sock
地址
# 查看 PHP 8.1 的 www.sock 地址
cat /etc/opt/remi/php81/php-fpm.d/www.conf | grep www.sock