CentOS7下PHP5.6+PHP-FPM环境bcmath扩展加载异常求助
你已经完成了基础的安装和重启操作,但还是遇到了phpinfo与get_loaded_extensions()结果不一致的问题,我来帮你梳理几个容易遗漏的排查点:
确认PHP-FPM使用的配置文件与phpinfo显示一致
phpinfo页面会明确显示Loaded Configuration File的路径,比如/etc/php.ini或/etc/php56/php.ini。你可以通过命令行检查PHP-FPM实际加载的配置文件:php-fpm -i | grep "Loaded Configuration File"如果两者路径不同,说明FPM加载的是另一个php.ini文件,你需要在对应文件中确保bcmath扩展被启用,或者调整FPM配置让它加载正确的ini。
检查bcmath扩展配置文件是否被FPM正确扫描
PHP扩展通常会在版本对应目录下(比如/etc/php56/php.d/)有单独的.ini文件,比如bcmath.ini,里面必须包含未被注释的extension=bcmath.so。你可以用以下命令确认FPM的扩展扫描目录:php-fpm -i | grep "Scan this dir for additional .ini files"如果扫描目录不包含
bcmath.ini所在路径,或者该文件被注释/缺失,就会导致扩展无法加载到FPM环境中。确保重启的是正确的PHP-FPM服务
在CentOS 7上,通过第三方源(比如Remi)安装的PHP 5.6,服务名通常不是默认的php-fpm,而是php56-php-fpm。你可以先确认正在运行的FPM进程:ps aux | grep php-fpm再用正确的服务命令重启:
systemctl restart php56-php-fpm很多人会不小心重启系统自带的旧版本PHP-FPM,导致新安装的扩展配置无法生效。
检查OPcache缓存的影响
如果你的PHP开启了OPcache,可能会缓存旧的扩展列表。你可以在phpinfo页面查看OPcache相关选项是否启用,如果开启了,尝试临时关闭OPcache(修改php.ini里的opcache.enable=0),重启FPM后再测试get_loaded_extensions(),或者手动刷新OPcache缓存。直接验证扩展功能是否可用
有时候get_loaded_extensions()的输出可能因环境问题出现偏差,你可以写一个简单的测试脚本验证bcmath函数是否正常工作:<?php var_dump(function_exists('bcadd')); // 正常应返回bool(true) echo bcadd('1.234', '5.678'); // 正常应输出6.912 ?>如果函数能正常运行,那可能只是扩展列表显示的问题,不影响实际使用;如果不能运行,再回到前面的步骤深入排查。
内容的提问来源于stack exchange,提问作者Sahil

