RHEL7.9 PHP5.4环境安装oci8-2.0.12后调用异常求助
OCI8 2.0.12 安装及加载失败问题解决方案
前期pecl安装失败原因说明
No releases available for package "pecl.php.net/oci8"报错是因为OCI8 2.0.12属于旧版本,已从PECL官方源下架,无法直接通过pecl install命令安装,本地tgz安装失败通常是因为缺少Oracle Instant Client的开发依赖头文件,你选择使用remi源的rpm包安装的方案是正确的。
扩展安装后不生效排查步骤
1. 修正扩展配置错误
你之前的extension_dir配置填写错误:extension_dir参数指向的是存放.so扩展文件的目录,不是oci8.ini的配置文件路径。
- 先确认oci8.so文件是否存在:
执行ls /usr/lib64/php/modules/ | grep oci8,正常会输出oci8.so - 修正PHP配置:
编辑你存放oci8配置的ini文件(默认remi源安装后会自动生成/etc/php.d/oci8.ini,无需手动新增配置),将配置改为:
extension=oci8.so ; 如果你要手动指定extension_dir,填写.so所在目录 extension_dir = "/usr/lib64/php/modules/"
- 执行
php -r "var_dump(extension_loaded('oci8'));"查看命令行是否能加载扩展,同时查看PHP错误日志定位加载失败原因,默认日志路径为/var/log/httpd/error_log(Apache)、/var/log/php-fpm/www-error.log(php-fpm)。
2. 配置Oracle Instant Client环境变量
必须配置系统路径变量才能让oci8扩展找到Oracle客户端库:
- 确认Oracle 19.11 Instant Client安装路径,rpm安装默认路径为
/usr/lib/oracle/19.11/client64/ - 编辑
/etc/profile,在末尾添加以下内容:
export ORACLE_HOME=/usr/lib/oracle/19.11/client64 export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH export PATH=$ORACLE_HOME/bin:$PATH
- 执行
source /etc/profile让全局变量生效 - 给Web服务单独配置变量(系统变量不会自动继承给Web服务):
- 若使用Apache:编辑
/etc/sysconfig/httpd,添加上述三行export配置,之后执行systemctl restart httpd重启服务 - 若使用php-fpm:编辑
/etc/php-fpm.d/www.conf,添加以下配置,之后执行systemctl restart php-fpm重启服务
env[ORACLE_HOME] = /usr/lib/oracle/19.11/client64 env[LD_LIBRARY_PATH] = /usr/lib/oracle/19.11/client64/lib - 若使用Apache:编辑
3. 关闭SELinux拦截
RHEL7默认开启的SELinux会拦截Web服务访问Oracle客户端库,执行以下命令放行:
setsebool -P httpd_execmem 1 setsebool -P httpd_can_network_connect 1
4. 验证配置
重启Web服务后,查看phpinfo页面是否出现oci8扩展板块,或执行php -r "var_dump(function_exists('oci_connect'));",输出为bool(true)即为配置成功。
内容的提问来源于stack exchange,提问作者ratna
相关产品推荐
相关产品推荐

