温馨提示×

ubuntu php-fpm怎么兼容旧项目

小樊
43
2026-09-10 09:19:17
栏目: 编程语言

Ubuntu 上用 PHP-FPM 运行旧项目,常见问题是 PHP 版本过高 导致老代码报错(比如 mysql_* 被移除、each() 废弃、严格模式等)。下面按实战角度给你几种兼容方案。


一、最推荐:多版本 PHP-FPM 共存(不破坏系统)

Ubuntu 可以同时安装多个 PHP 版本,用不同 FPM socket 服务不同项目。

1. 安装旧版本 PHP(如 7.1 / 5.6)

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

2. 查看 FPM socket

ls /run/php/
# php5.6-fpm.sock
# php8.1-fpm.sock

3. Nginx 指定旧项目用旧 PHP

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php5.6-fpm.sock;
    include fastcgi_params;
}

优点:新项目用 PHP 8,旧项目用 PHP 5.6
最安全、最常用


二、旧项目必须用 PHP 5.6 / 5.4(极老)

如果项目是 2012 年以前

  • 不建议用 Ubuntu 20/22
  • 建议:
    • Ubuntu 16.04 + PHP 5.6
    • 或用 Docker

三、不想降 PHP?改代码兼容(不推荐老项目)

常见问题 & 临时修法

问题 解决
mysql_*() 临时装 php7.0-mysql 不行,只能改 mysqli
each() 改成 foreach
严格模式报错 error_reporting(E_ALL & ~E_DEPRECATED)
时区错误 date.timezone = Asia/Shanghai

⚠️ 老项目代码量大的话,不建议硬改


四、用 Docker 隔离旧项目(专业方案)

docker run -d -p 9000:9000 php:5.6-fpm

Nginx 连:

fastcgi_pass 127.0.0.1:9000;

✅ 不影响宿主机
✅ 可长期维护


五、php.ini 兼容旧行为(辅助)

short_open_tag = On
magic_quotes_gpc = Off
display_errors = On

六、推荐组合(实战)

场景 方案
公司旧后台 PHP 7.1 FPM
2010 年前系统 PHP 5.6 + Docker
新 + 旧共存 多 PHP-FPM

如果你愿意,可以告诉我:

  • Ubuntu 版本
  • PHP 当前版本
  • 报错信息 or 项目年代

我可以直接帮你给出具体配置

0