内网离线装PHP必须提前打包所有RPM或源码依赖,否则./configure会因缺libxml2-devel等失败;RPM适合版本严格匹配的CentOS/RHEL系,源码编译需同构跳板机预编译并打包整个/usr/local/php目录。

内网离线装PHP,别指望yum install php能直接跑通——它会卡在“找不到包”上不动。必须提前把所有RPM或源码依赖打包带进去,否则连./configure都会因缺libxml2-devel或openssl-devel失败。
怎么选:RPM安装 vs 源码编译?
RPM适合CentOS/RHEL系且版本严格匹配的场景;源码编译更灵活,但必须在同构机器(相同CPU架构+系统大版本)上预编译,否则make可能报undefined reference to `SSL_CTX_set_max_proto_version'这类符号错误。
- RPM方式:用
yum --downloadonly或挂载ISO提取/mnt/dvd/Packages/下所有php-*.rpm、php-fpm、php-cli及底层依赖(如oniguruma、libzip、sqlite-libs) - 源码方式:必须在与目标机完全一致的跳板机上执行
./configure(比如银河麒麟V10 ARM64就得用ARM64跳板机),不能只复制make后的.o文件——要make install后打包整个/usr/local/php目录 - 注意隐式依赖:
php-fpm启动时若报Failed to load /usr/lib64/php/modules/opcache.so: undefined symbol: zend_string_init,说明php主程序和opcache模块不是同一轮make产出的,必须一起打包
关键依赖包漏哪些就直接跪?
离线环境里最常栽在“以为装了,其实没装全”。以下这些不是可选,是php -v能跑、php -m能列扩展、php-fpm能启起来的硬门槛:
-
libxml2-devel(否则--enable-xml失败)、openssl-devel(否则curl/openssl扩展全挂) -
sqlite-devel(影响pdo_sqlite)、bzip2-devel(影响zlib和bz2扩展) -
oniguruma(PHP 7.3+正则引擎,不装mbregex和mbstring直接不可用) -
libzip和libzip-devel(PHP 7.4+默认启用zip扩展,缺它php -m | grep zip为空)
配置文件和权限最容易被忽略的三件事
就算二进制和扩展都齐了,php-fpm仍可能起不来,或Web请求返回空白页——问题往往不在PHP本身,而在部署细节:
立即学习“PHP免费学习笔记(深入)”;
-
php.ini里必须显式写date.timezone = Asia/Shanghai,否则date()函数抛警告,某些框架直接拒绝启动 -
www.conf中若用listen = /var/run/php-fpm.sock,得确认/var/run/php-fpm/目录存在且www用户有写权限;SELinux启用时,还需setsebool -P httpd_can_network_connect 1放行socket通信 - Windows解压版PHP,必须复制
php.ini-development为php.ini,并取消extension=mysqli、extension=openssl前的分号;否则php -m看不到这些模块,连MySQL都连不上
离线部署真正的难点从来不是“怎么装”,而是“怎么确认所有隐式依赖和运行时上下文都到位”。一个php -i | grep -E "(openssl|mysql|zip)"能查模块,但查不出libonig.so.5是否在LD_LIBRARY_PATH里——所以务必在跳板机上完整走一遍php -v→php -m→php-fpm -t→curl -I http://127.0.0.1流程,再打包。



















