PHP 5.x 安装扩展前必须确认三件事:当前PHP版本、是否使用已弃用高危扩展(如mcrypt)、扩展源是否可信;pecl安装需指定对应phpize路径;php.ini中extension需用绝对路径并验证加载。

PHP 5.x 安装扩展前必须确认的三件事
PHP 5 已于 2018 年彻底停止维护,官方不再提供任何安全更新。这意味着:你装的不是“扩展”,而是潜在的漏洞载体。安装前务必确认:
– 当前 PHP 版本(用 php -v 查,如 PHP 5.6.40)
– 是否仍在使用已知存在远程代码执行风险的旧扩展(如 php-mcrypt、php-ereg,它们在 PHP 7+ 中已被移除且无替代补丁)
– 扩展源是否来自可信编译包(如 php5-dev + 源码编译)而非第三方不可信的二进制包
用 pecl 安装扩展时,PHP 5 必须手动指定 phpize 路径
PHP 5 的 pecl 命令默认调用系统 PATH 中第一个 phpize,而老系统常同时存在 PHP 5 和 PHP 7 的开发工具。不指定路径会导致编译失败或扩展加载后段错误。
正确做法是先定位对应版本的工具:
which phpize5 # 或 /usr/bin/phpize5 # Debian/Ubuntu 常见路径 /usr/local/php5/bin/phpize # 自编译常见路径
然后显式调用:
/usr/bin/phpize5 && ./configure --with-php-config=/usr/bin/php-config5 && make && sudo make install
注意:--with-php-config 参数必须与 phpize 版本严格匹配,否则 extension_dir 写入错误路径,php -m 看不到扩展。
立即学习“PHP免费学习笔记(深入)”;
php.ini 中 extension=xxx.so 的写法有兼容陷阱
PHP 5.3+ 支持直接写扩展名(如 extension=redis.so),但部分老旧发行版(如 CentOS 6 默认源)的 PHP 5.3.3 仍要求绝对路径:
- ❌ 错误写法(扩展找不到):
extension=memcache.so - ✅ 正确写法(查清实际路径):
extension=/usr/lib64/php/modules/memcache.so
查路径用:php -r "echo ini_get('extension_dir');"
装完后务必运行 php -m | grep memcache 验证,别只看 phpinfo() 页面——有些扩展虽注册但初始化失败,php -m 才反映真实加载状态。
curl、openssl、gd 这类“基础依赖扩展”最容易出兼容问题
PHP 5 后期版本对底层库版本敏感度高。例如:
– php-curl 在 PHP 5.6 下若链接了新版 libcurl >= 7.62.0,可能触发 SSL connect error
– php-gd 若系统装了 libjpeg-turbo 而非传统 libjpeg,编译时需加 --with-jpeg-dir=/usr 显式指定
– php-openssl 在 OpenSSL 1.1.1+ 环境下,PHP 5.6 无法识别新 API,必须降级到 OpenSSL 1.0.2u 或打补丁
最稳妥的做法:用与 PHP 5 编译时相同的系统环境(如 CentOS 6.10 + OpenSSL 1.0.1e)构建扩展,避免混用新旧 ABI。
老版本 PHP 扩展最难的不是“怎么装”,而是“装完能不能用、用多久不出事”。很多问题表面是配置错误,根源是底层库 ABI 不兼容或内存管理模型过时。动手前,先用 php -i | grep -E "(version|openssl|curl|gd)" 把依赖版本全列出来,比盲目重装更省时间。











