在Linux环境下部署PHP 5.5版本,由于该版本已停止官方维护(EOL),直接使用系统默认包管理器安装往往会遇到源失效或依赖缺失的问题。最专业且稳定的解决方案是采用源码编译安装,通过编译安装,不仅可以精确控制PHP的模块功能,还能灵活适配老旧系统的业务需求,确保生产环境的兼容性与安全性,以下将基于CentOS/RedHat系列系统(Ubuntu/Debian逻辑类似),详细阐述从环境准备、依赖解决、编译参数优化到服务配置的全过程。

环境准备与依赖库安装
在进行PHP源码编译前,必须确保系统基础开发环境完备,PHP 5.5运行依赖于一系列底层库,如libxml2、curl、openssl以及图形处理库gd等。缺失依赖是导致编译失败最常见的原因,因此这一步至关重要。
通过包管理器安装编译工具及核心依赖库:
yum install -y gcc gcc-c++ make automake autoconf libtool libxml2-devel libxml2 libcurl-devel libjpeg-devel libpng-devel freetype-devel libicu-devel openldap-devel openssl-devel
对于PHP 5.5特有的加密库依赖,libmcrypt是许多老旧项目必须的组件,虽然现代系统已弃用,但在PHP 5.5时代它是标配,如果系统源无法直接提供,需要通过EPEL源或手动编译安装libmcrypt与mhash。确保所有-devel包正确安装,是后续configure顺利通过的前提。
下载PHP源码包与解压
鉴于官网已不再提供旧版本下载,建议从可靠的归档镜像站获取PHP 5.5.38(该系列最后一个稳定版本)源码包,使用wget命令下载并解压:
wget https://museum.php.net/php5/php-5.5.38.tar.gz tar -zxvf php-5.5.38.tar.gz cd php-5.5.38
进入源码目录后,不要急于执行编译,先检查系统环境与源码的兼容性,特别是OpenSSL版本过新时可能会导致编译错误,此时可能需要修改源码中的配置文件以适配。
核心编译配置与参数优化
./configure脚本是编译安装的灵魂,它决定了PHP包含哪些功能模块。在生产环境中,建议采用“最小化+按需开启”的原则,既减少漏洞面,又提升性能。
以下是一个兼顾通用性与性能的典型配置方案:
./configure \ --prefix=/usr/local/php \ --with-config-file-path=/usr/local/php/etc \ --enable-fpm \ --with-fpm-user=www \ --with-fpm-group=www \ --enable-mysqlnd \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-iconv-dir \ --with-freetype-dir \ --with-jpeg-dir \ --with-png-dir \ --with-zlib \ --with-libxml-dir \ --enable-xml \ --disable-rpath \ --enable-bcmath \ --enable-shmop \ --enable-sysvsem \ --enable-inline-optimization \ --enable-mbregex \ --enable-mbstring \ --with-mcrypt \ --with-gd \ --enable-gd-native-ttf \ --with-openssl \ --with-mhash \ --enable-pcntl \ --enable-sockets \ --with-xmlrpc \ --enable-zip \ --enable-soap \ --without-pear \
关键参数解析:

--enable-fpm:PHP 5.5时代,PHP-FPM已是管理PHP进程的最佳方式,必须开启。--with-mysqlnd:使用MySQL原生驱动(Native Driver),替代旧的libmysql客户端库,性能更优且兼容性更好。--prefix:指定安装目录,便于统一管理和卸载。--disable-rpath:避免硬编码库路径,提升灵活性。
执行此步骤时,若报错提示缺少特定库,需根据错误信息回退安装对应依赖,切忌忽略报错强行进行下一步。
编译安装与初始化配置
配置通过后,执行编译与安装命令。利用多核CPU加速编译过程可以显著节省时间:
make -j 4 && make install
安装完成后,源码目录中提供了两个默认配置文件模板。对于生产环境,推荐使用php.ini-production作为基础,因为它默认关闭了调试信息并优化了性能。
cp php.ini-production /usr/local/php/etc/php.ini cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
需要调整PHP-FPM的配置文件,编辑php-fpm.conf,确保以下关键参数设置正确:
pid = /usr/local/php/var/run/php-fpm.pid:指定PID文件位置,便于管理进程。error_log = /usr/local/php/var/log/php-fpm.log:开启日志记录,方便排查故障。listen = 127.0.0.1:9000:设置监听地址与端口,Nginx将通过此端口与PHP通信。- 去除
pm.max_children、pm.start_servers等进程管理参数前的注释,根据服务器实际内存大小调整pm.max_children的值,防止内存溢出,每个PHP-FPM子进程占用约30-50MB内存,需合理计算最大子进程数。
启动服务与系统整合
将PHP-FPM加入系统服务,以便通过service或systemctl命令管理,在源码目录的sapi/fpm下有启动脚本模板:
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm chmod +x /etc/init.d/php-fpm chkconfig --add php-fpm chkconfig php-fpm on
可以启动PHP-FPM服务:
service php-fpm start
配置Web服务器(如Nginx)以支持PHP解析,在Nginx配置文件的server块中,添加以下location块,并将脚本路径传递给PHP-FPM:
location ~ \.php$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
重载Nginx配置后,在Web根目录创建index.php文件,输入<?php phpinfo(); ?>,访问该页面若显示PHP 5.5.38版本信息,则说明部署成功。

常见编译错误与专业解决方案
在安装PHP 5.5的过程中,开发者常会遇到Don't know how to define struct flock错误。这是由于系统库版本与PHP源码检测机制冲突导致的,解决方案是修改configure文件,将for ac_func in do_in do_in这一行附近的检测逻辑注释掉,或者直接在./configure命令后添加--with-libdir=lib64参数指定库文件路径。
另一个常见问题是mcrypt.h文件找不到。这通常是因为libmcrypt开发包未安装或安装路径非标准,除了安装libmcrypt-devel外,有时需要手动创建软链接:ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la,确保编译器能找到头文件。
相关问答
Q1:在Linux系统安装PHP 5.5时,如何解决缺少libmcrypt依赖的问题?
A: libmcrypt在较新的Linux发行版中已被移除,解决方法有两种:一是尝试从EPEL或其他第三方仓库安装libmcrypt及libmcrypt-devel包;二是下载libmcrypt源码包进行编译安装,安装时指定--prefix=/usr/local/libmcrypt,并在PHP的configure命令中添加--with-mcrypt=/usr/local/libmcrypt参数来指定其路径。
Q2:为什么编译PHP时推荐使用mysqlnd驱动,而不是旧的libmysql客户端库?
A: 推荐使用mysqlnd(MySQL Native Driver)主要基于三个原因:mysqlnd是PHP官方绑定的,无需额外安装MySQL客户端库,简化了部署;它直接利用PHP的内存管理,性能更高且内存占用更低;mysqlnd支持PHP 5.5引入的更多高级特性,如异步查询等,兼容性和扩展性更好。
通过上述源码编译的方式部署PHP 5.5,虽然步骤相对繁琐,但能够最大程度地保证环境的纯净与可控,如果您在安装过程中遇到特定的报错信息,欢迎在评论区留言,我们将为您提供针对性的排查建议。


















