在 Linux 环境下部署 PHP 5.6,虽然该版本已停止官方维护(EOL),但在维护老旧项目或特定业务场景下仍是刚需。核心上文归纳是:为了确保系统兼容性与稳定性,推荐优先使用源码编译安装,或针对 CentOS 系统使用 Remi 第三方源进行安装,这两种方法能最大程度规避依赖库冲突,并提供灵活的扩展配置能力,以下将详细阐述具体的操作步骤、依赖处理及配置优化方案。

环境准备与依赖安装
在进行 PHP 5.6 安装前,必须确保系统基础环境已就绪,无论是 CentOS 还是 Ubuntu,缺少编译工具或依赖库会导致安装失败。这一步是成功安装的基石,不可跳过。
对于 CentOS 7 系统,需要先安装 EPEL 源以及基础编译工具:
yum install epel-release -y yum install gcc gcc-c++ make libxml2-devel openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel libicu-devel openldap-devel -y
对于 Ubuntu 系统,则需使用 apt-get 更新源并安装依赖:
apt-get update apt-get install build-essential libxml2-dev libcurl4-openssl-dev lib libjpeg-dev libpng-dev libfreetype6-dev libonig-dev libzip-dev -y
特别需要注意的是,PHP 5.6 对高版本的 OpenSSL 和某些系统库可能存在兼容性问题,如果系统环境过新(如 CentOS 8 或 Ubuntu 20.04+),源码编译时可能需要指定旧版库路径,或者采用容器化部署以隔离环境风险。
源码编译安装(推荐专业场景)
源码编译是灵活性最高的方式,能够精确控制 PHP 的模块和参数。此方法适合对性能有极致要求或需要定制扩展的场景。
-
下载源码包 官方已归档旧版本,需从 PHP 的归档站点或镜像站下载,建议下载 PHP 5.6.40,这是 5.6 系列的最后一个稳定版本。
wget https://museum.php.net/php5/php-5.6.40.tar.gz tar -zxvf php-5.6.40.tar.gz cd php-5.6.40
-
预编译配置 这是编译的核心步骤,必须正确指定安装路径和所需扩展,以下配置包含了 MySQL、GD 图形库、CURL 等常用模块:
./configure \ --prefix=/usr/local/php56 \ --with-config-file-path=/usr/local/php56/etc \ --enable-fpm \ --with-fpm-user=www \ --with-fpm-group=www \ --with-mysql=mysqlnd \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-gd \ --with-jpeg-dir \ --with-png-dir \ --with-freetype-dir \ --with-curl \ --with-openssl \ --enable-mbstring \ --enable-sockets \ --enable-zip \ --enable-bcmath
专业提示:如果报错提示
configure: error: xml2-config not found,说明 libxml2-devel 未安装;提示Don't know how to define struct flock,通常需要添加--with-libdir=lib64参数(针对 64 位系统)。 -
编译与安装

make && make install
-
配置文件初始化 编译完成后,需要生成配置文件并启动 PHP-FPM。
cp php.ini-development /usr/local/php56/etc/php.ini cp /usr/local/php56/etc/php-fpm.conf.default /usr/local/php56/etc/php-fpm.conf cp sapi/fpm/init.d.php-fpm /etc/init.d/php-f56 chmod +x /etc/init.d/php-f56
可以通过
/etc/init.d/php-f56 start启动服务。
使用 Remi 仓库安装(推荐 CentOS 快速部署)
对于 CentOS 用户,使用 Remi 仓库是安装 PHP 5.6 最快捷、依赖关系处理最完善的方式。Remi 源专门提供了旧版 PHP 的 RPM 包,解决了复杂的依赖地狱问题。
-
安装 Remi 源
yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
-
启用 PHP 5.6 模块 使用
yum-config-manager或remi-php56命令切换版本:yum-config-manager --enable remi-php56
-
安装 PHP 及常用扩展
yum install php php-cli php-fpm php-mysql php-gd php-mbstring php-curl php-xml -y
安装完成后,直接使用
systemctl start php-fpm即可管理服务。这种方式的优势在于升级和卸载非常方便,适合运维人员快速交付环境。
配置优化与安全加固
安装完成并不意味着结束,针对 PHP 5.6 的安全加固是 E-E-A-T 原则中“可信”的重要体现,由于该版本不再接收安全补丁,必须在 php.ini 中进行严格限制。
-
禁用危险函数 在
php.ini中找到disable_functions,添加如下内容:
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
-
隐藏版本信息 防止黑客通过 HTTP 头获取具体版本信息:
expose_php = Off
-
资源限制 防止脚本耗尽服务器资源:
max_execution_time = 30 memory_limit = 128M post_max_size = 8M upload_max_filesize = 2M
常见问题与专业见解
在实际操作中,缺少 libmcrypt 扩展是常见痛点,PHP 5.6 时代广泛使用 Mcrypt,但现代 Linux 发行版往往已将其移除,解决方案是手动编译安装 Libmcrypt,或者在编译 PHP 时去掉该选项(如果代码允许)。笔者的专业建议是: 如果业务代码允许,尽量迁移至 OpenSSL 或其他现代加密方式,减少对 Mcrypt 的依赖。
连接 MySQL 数据库时,PHP 5.6 默认使用 mysqlnd(Native Driver),这是最佳实践,它无需额外安装 MySQL 客户端库即可连接数据库,性能更好且支持 SSL 连接。
相关问答
Q1:在编译 PHP 5.6 时提示 Don't know how to define struct flock 错误怎么办?
A1: 这是一个典型的 64 位系统兼容性问题,解决方法是在 ./configure 命令中显式指定库目录参数,添加 --with-libdir=lib64 即可解决,这是因为 PHP 的构建脚本在某些系统上无法自动检测到 64 位库文件的位置,手动指定后通常能顺利通过编译检查。
Q2:PHP 5.6 已经停止维护,除了升级代码,还有哪些安全防护手段? A2: 确实,升级代码是根本之策,但在无法立即升级的情况下,建议采用多层防御策略,在 Web 服务器层面(如 Nginx 或 Apache)配置严格的 WAF 规则,拦截常见攻击;利用操作系统层面的防火墙限制出站连接,防止 Webshell 反弹;强烈建议使用 Docker 容器运行 PHP 5.6,将宿主机内核与容器隔离,即使被攻破也难以逃逸到宿主机,最大程度降低损失。