在 Ubuntu 上用 PHP-FPM 运行旧项目,常见问题是 PHP 版本过高 导致老代码报错(比如 mysql_* 被移除、each() 废弃、严格模式等)。下面按实战角度给你几种兼容方案。
Ubuntu 可以同时安装多个 PHP 版本,用不同 FPM socket 服务不同项目。
sudo add-apt-repository ppa:ondrej/php
sudo apt update
# 例如 PHP 5.6
sudo apt install php5.6-fpm php5.6-mysql php5.6-gd php5.6-mbstring
ls /run/php/
# php5.6-fpm.sock
# php8.1-fpm.sock
location ~ \.php$ {
fastcgi_pass unix:/run/php/php5.6-fpm.sock;
include fastcgi_params;
}
✅ 优点:新项目用 PHP 8,旧项目用 PHP 5.6
✅ 最安全、最常用
如果项目是 2012 年以前:
| 问题 | 解决 |
|---|---|
mysql_*() |
临时装 php7.0-mysql 不行,只能改 mysqli |
each() |
改成 foreach |
| 严格模式报错 | error_reporting(E_ALL & ~E_DEPRECATED) |
| 时区错误 | date.timezone = Asia/Shanghai |
⚠️ 老项目代码量大的话,不建议硬改
docker run -d -p 9000:9000 php:5.6-fpm
Nginx 连:
fastcgi_pass 127.0.0.1:9000;
✅ 不影响宿主机
✅ 可长期维护
short_open_tag = On
magic_quotes_gpc = Off
display_errors = On
| 场景 | 方案 |
|---|---|
| 公司旧后台 | PHP 7.1 FPM |
| 2010 年前系统 | PHP 5.6 + Docker |
| 新 + 旧共存 | 多 PHP-FPM |
如果你愿意,可以告诉我:
我可以直接帮你给出具体配置。