Ubuntu 18.04 LTS下PHP-FPM+NGINX环境OCI8扩展启用问题求助
PHP OCI8扩展在Ubuntu 18.04 LTS的PHP-FPM环境中加载失败问题
问题背景
我一直在使用最新的PHP包,编译安装OCI8扩展后操作看似正常,但在PHP-FPM配置中启用该扩展后,phpinfo()输出里完全看不到这个扩展的存在。这套编译安装流程在Ubuntu 16.04 LTS中可以正常工作,但到了Ubuntu 18.04 LTS就出现了异常。
CLI环境的问题与解决
- CLI环境下扩展默认无法加载,报错信息如下:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/oci8.so' - libmql1.so: cannot open shared object file: No such file or directory in Unknown on line 0 - 执行以下命令解决了CLI的加载问题:
echo 'LD_LIBRARY_PATH="/opt/oracle/instantclient_12_2"' >> /etc/environment
PHP-FPM环境的尝试与困境
- 尝试将
LD_LIBRARY_PATH添加到PHP-FPM环境配置中,执行命令:echo "env['LD_LIBRARY_PATH'] = /opt/oracle/instantclient_12_2" >> /etc/php/7.2/fpm/pool.d/www.conf - 重启
php7.2-fpm后,phpinfo()的Environment和PHP Variables中已显示该变量,但OCI8扩展仍静默加载失败——即使开启了debug日志和display_startup_errors,也没有任何相关报错信息。
Apache环境的对比验证
在同一服务器的Apache环境中,将export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2添加到/etc/apache2/envvars后,OCI8扩展可以正常工作;未设置该变量时,Apache会报出与CLI类似的加载错误。
版本差异与测试范围
- Ubuntu 16.04 LTS无需设置
LD_LIBRARY_PATH即可正常加载OCI8扩展,这个变化始于Ubuntu 17.10和Ubuntu 18.04 LTS - 我已在laravel/homestead 6.0.0和ubuntu/bionic64 v20180509.0.0两个Vagrant虚拟机中测试,问题表现完全一致
后续排查进展
EDIT 1
我向包维护者的问题追踪平台提问,对方认为是编译时未设置合适的RPATH,但我确认自己已经设置过该参数,问题仍未解决。随后发现:Ubuntu 18.04编译的扩展使用RUNPATH而非16.04版本的RPATH,如果PHP-FPM仅识别RPATH而忽略RUNPATH,这很可能就是导致加载失败的原因。
EDIT 2
我发现了一个可能与此问题相关的未关闭bug报告。
EDIT 3
根据评论区的建议,我正在重新检查更新ld配置的相关内容。
内容的提问来源于stack exchange,提问作者Ben Johnson
相关产品推荐
相关产品推荐

