如何在同一个VPS服务器上安装并配置两个不同版本的PHP?
| 安装方法 |
适用系统 |
复杂度 |
灵活性 |
| 使用PPA源安装 |
Ubuntu/Debian |
中等 |
较高 |
| 源码编译安装 |
所有Linux系统 |
较高 |
最高 |
| 使用Docker容器 |
所有Linux系统 |
较低 |
中等 |
| 第三方管理工具 |
CentOS/RHEL |
较低 |
中等 |
一个VPS安装两个PHP版本的完整指南
主要安装方法对比
| 方法名称 |
操作步骤 |
适用场景 |
优势特点 |
| 使用PPA源安装 |
4步 |
Ubuntu/Debian系统 |
安装简单,版本更新及时 |
| 源码编译安装 |
6步 |
所有Linux发行版 |
完全自定义,灵活性最高 |
| Docker容器部署 |
5步 |
需要环境隔离 |
环境隔离,互不干扰 |
方法一:使用PPA源安装(Ubuntu/Debian)
步骤1:更新系统并添加PPA源
操作说明:首先更新系统包管理器,然后添加包含多个PHP版本的PPA源。
使用工具提示:使用apt包管理器和add-apt-repository命令。
sudo apt update
sudo apt upgrade -y
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
步骤2:安装两个PHP版本
操作说明:同时安装PHP 7.4和PHP 8.0两个版本。
使用工具提示:使用apt install命令指定版本号。
# 安装PHP 7.4
sudo apt install php7.4 php7.4-fpm php7.4-cli php7.4-common php7.4-mysql
安装PHP 8.0
sudo apt install php8.0 php8.0-fpm php8.0-cli php8.0-common php8.0-mysql
步骤3:配置PHP-FPM服务
操作说明:为每个PHP版本配置独立的PHP-FPM服务。
使用工具提示:编辑PHP-FPM配置文件,设置不同的监听端口。
# 编辑PHP 7.4 FPM配置
sudo nano /etc/php/7.4/fpm/pool.d/www.conf
修改监听设置(PHP 7.4)
listen = /run/php/php7.4-fpm.sock
或者使用端口
listen = 127.0.0.1:9074
编辑PHP 8.0 FPM配置
sudo nano /etc/php/8.0/fpm/pool.d/www.conf
修改监听设置(PHP 8.0)
listen = /run/php/php8.0-fpm.sock
或者使用端口
listen = 127.0.0.1:9080
步骤4:启动服务并配置Nginx
操作说明:启动PHP-FPM服务并在Nginx中配置虚拟主机。
使用工具提示:使用systemctl管理服务,编辑Nginx站点配置。
# 启动PHP-FPM服务
sudo systemctl start php7.4-fpm
sudo systemctl start php8.0-fpm
sudo systemctl enable php7.4-fpm
sudo systemctl enable php8.0-fpm
检查服务状态
sudo systemctl status php7.4-fpm
sudo systemctl status php8.0-fpm
Nginx站点配置示例:
server {
listen 80;
servername site1.example.com;
location ~ \.php$ {
fastcgipass 127.0.0.1:9074;
include fastcgi.conf;
}
}
server {
listen 80;
servername site2.example.com;
location ~ \.php$ {
fastcgipass 127.0.0.1:9080;
include fastcgi.conf;
}
}
方法二:源码编译安装
步骤1:安装编译依赖
操作说明:安装编译PHP所需的开发工具和库文件。
使用工具提示:使用apt或yum包管理器安装开发工具。
# Ubuntu/Debian
sudo apt install build-essential autoconf libtool pkg-config \
libxml2-dev libsqlite3-dev libcurl4-openssl-dev \
libonig-dev libzip-dev
CentOS/RHEL
sudo yum groupinstall "Development Tools"
sudo yum install libxml2-devel sqlite-devel curl-devel \
oniguruma-devel libzip-devel
步骤2:下载并编译第一个PHP版本
操作说明:下载PHP 7.4源码并编译安装到独立目录。
使用工具提示:使用wget下载,configure配置,make编译。
# 下载PHP 7.4
wget https://www.php.net/distributions/php-7.4.33.tar.gz
tar -xzf php-7.4.33.tar.gz
cd php-7.4.33
配置编译选项
./configure --prefix=/opt/php74 \
--with-config-file-path=/opt/php74/etc \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data
编译安装
make -j4
sudo make install
步骤3:下载并编译第二个PHP版本
操作说明:下载PHP 8.0源码并编译安装到另一个独立目录。
# 下载PHP 8.0
wget https://www.php.net/distributions/php-8.0.28.tar.gz
tar -xzf php-8.0.28.tar.gz
cd php-8.0.28
配置编译选项
./configure --prefix=/opt/php80 \
--with-config-file-path=/opt/php80/etc \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data
编译安装
make -j4
sudo make install
步骤4:配置系统服务
操作说明:为两个PHP版本创建systemd服务文件。
使用工具提示:在/etc/systemd/system/目录创建服务文件。
# 创建PHP 7.4服务文件
sudo nano /etc/systemd/system/php74-fpm.service
[Unit]
Description=PHP 7.4 FastCGI Process Manager
After=network.target
[Service]
Type=simple
ExecStart=/opt/php74/sbin/php-fpm --nodaemonize --fpm-config /opt/php74/etc/php-fpm.conf
Restart=on-failure
[Install]
WantedBy=multi-user.target
常见问题及解决方案
| 问题 |
原因 |
解决方案 |
| PHP-FPM服务启动失败 |
端口冲突或配置文件错误 |
检查配置文件中的监听端口,确保每个PHP版本使用不同的端口或socket文件 |
| Nginx返回502错误 |
PHP-FPM未运行或配置不匹配 |
确认PHP-FPM服务状态,检查Nginx配置中的fastcgipass地址是否正确 |
| 扩展模块不兼容 |
不同PHP版本扩展API变化 |
为每个PHP版本单独编译安装对应的扩展模块 |
| 内存占用过高 |
同时运行多个PHP进程 |
调整php-fpm.conf中的pm.maxchildren参数,优化进程数量 |
| 版本切换困难 |
系统默认PHP版本设置 |
使用update-alternatives命令管理多版本,或通过虚拟主机配置指定版本 |
验证安装结果
操作说明:创建测试文件验证两个PHP版本都能正常工作。
使用工具提示:在网站根目录创建PHP信息文件。
```bash
为站点1创建测试文件
echo "
发表评论