centos 安装 多个php
在 CentOS 上安装多个 PHP 版本是一个常见的需求,尤其是在需要同时支持不同项目或模块的情况下。以下是详细的步骤来实现这一目标:
---
### **1. 确认当前环境**
在开始之前,请确保你的系统是最新的,并且已经安装了必要的工具:
```bash
sudo yum update -y
```
---
### **2. 安装依赖包**
为了编译和管理多个 PHP 版本,你需要安装一些依赖工具:
```bash
sudo yum groupinstall "Development Tools" -y
sudo yum install epel-release -y
sudo yum install wget gcc make autoconf libtool bzip2-devel openssl-devel pcre-devel zlib-devel gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel mysql-devel sqlite-devel -y
```
---
### **3. 下载并编译多个 PHP 版本**
我们可以通过源码编译的方式来安装多个 PHP 版本。假设我们需要安装 PHP 7.4 和 PHP 8.1。
#### **(1) 下载 PHP 源码**
进入一个临时目录(如 `/usr/local/src`),下载所需的 PHP 版本:
```bash
cd /usr/local/src
wget https://www.php.net/distributions/php-7.4.33.tar.gz
wget https://www.php.net/distributions/php-8.1.10.tar.gz
```
#### **(2) 解压并配置 PHP**
为每个版本创建独立的安装目录,并分别进行配置、编译和安装。
##### PHP 7.4
```bash
tar xzf php-7.4.33.tar.gz
cd php-7.4.33
# 配置选项:指定安装路径和扩展模块
./configure \\
--prefix=/opt/php74 \\
--with-config-file-path=/opt/php74/etc \\
--with-pdo-mysql \\
--with-zlib \\
--with-curl \\
--with-openssl \\
--with-gd \\
--with-jpeg \\
--with-png \\
--with-freetype \\
--enable-bcmath \\
--enable-mbstring \\
--enable-zip \\
--enable-exif \\
--disable-debug
# 编译并安装
make && sudo make install
```
##### PHP 8.1
```bash
cd ../php-8.1.10
# 配置选项:指定安装路径和扩展模块
./configure \\
--prefix=/opt/php81 \\
--with-config-file-path=/opt/php81/etc \\
--with-pdo-mysql \\
--with-zlib \\
--with-curl \\
--with-openssl \\
--with-gd \\
--with-jpeg \\
--with-png \\
--with-freetype \\
--enable-bcmath \\
--enable-mbstring \\
--enable-zip \\
--enable-exif \\
--disable-debug
# 编译并安装
make && sudo make install
```
---
### **4. 配置 PHP**
为每个 PHP 版本创建配置文件和启动脚本。
#### **(1) 创建配置文件**
将默认的 `php.ini` 文件复制到对应的安装目录:
```bash
sudo cp php.ini-production /opt/php74/etc/php.ini
sudo cp php.ini-production /opt/php81/etc/php.ini
```
#### **(2) 创建启动脚本**
为每个 PHP 版本创建一个启动脚本,例如 `/etc/init.d/php74` 和 `/etc/init.d/php81`。
以 PHP 7.4 的启动脚本为例:
```bash
sudo nano /etc/init.d/php74
```
添加以下内容:
```bash
#!/bin/bash
PHP_BIN="/opt/php74/bin/php"
PHP_FPM_BIN="/opt/php74/sbin/php-fpm"
case "$1" in
start)
echo "Starting PHP-FPM 7.4..."
$PHP_FPM_BIN --fpm-config /opt/php74/etc/php-fpm.conf
;;
stop)
echo "Stopping PHP-FPM 7.4..."
killall -9 php-fpm
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
```
赋予执行权限:
```bash
sudo chmod +x /etc/init.d/php74
sudo chmod +x /etc/init.d/php81
```
---
### **5. 配置 Web 服务器**
如果你使用 Apache 或 Nginx,需要为每个 PHP 版本配置不同的 FastCGI 路径。
#### **(1) Apache 配置**
编辑 Apache 的虚拟主机配置文件,为每个 PHP 版本设置不同的 `ProxyPassMatch` 规则:
```apache
<VirtualHost *:80>
ServerName example.com
<FilesMatch \\.php$>
SetHandler "proxy:unix:/opt/php74/var/run/php-fpm.sock|fcgi://localhost/"
</FilesMatch>
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:80>
ServerName example.com/php81
<FilesMatch \\.php$>
SetHandler "proxy:unix:/opt/php81/var/run/php-fpm.sock|fcgi://localhost/"
</FilesMatch>
DocumentRoot /var/www/html
</VirtualHost>
```
#### **(2) Nginx 配置**
编辑 Nginx 的配置文件,为每个 PHP 版本设置不同的 FastCGI 路径:
```nginx
server {
listen 80;
server_name example.com;
location ~ \\.php$ {
fastcgi_pass unix:/opt/php74/var/run/php-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
server {
listen 80;
server_name example.com/php81;
location ~ \\.php$ {
fastcgi_pass unix:/opt/php81/var/run/php-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
```
---
### **6. 启动和验证**
启动各个 PHP-FPM 服务:
```bash
sudo service php74 start
sudo service php81 start
```
访问相应的域名或路径,检查是否正确加载了对应的 PHP 版本。
---
### **7. 卸载或切换版本**
如果需要卸载某个 PHP 版本,可以直接删除其安装目录:
```bash
sudo rm -rf /opt/php74
sudo rm -rf /opt/php81
```
若需要切换版本,只需修改 Web 服务器的配置文件并重启服务即可。
---
通过以上步骤,你可以在 CentOS 上成功安装和管理多个 PHP 版本。如果有任何问题或需要进一步的帮助,请随时告知!