Nginx下PHP7.4安装PDO Oracle驱动报could not find driver求助
Nginx+PHP7.4环境PDO Oracle驱动配置方案
你遇到的ERROR: could not find driver报错翻译为错误:找不到驱动,核心原因是PHP运行环境未正确加载pdo_oci扩展,按以下步骤操作即可解决:
前置依赖安装
- 安装Oracle Instant Client 19c版本(向下兼容所有主流Oracle数据库版本,适配PHP7.4),需安装Basic、SDK、SQL*Plus三个组件,安装完成后执行以下命令注册系统动态链接库:
echo "/usr/lib/oracle/19.8/client64/lib" > /etc/ld.so.conf.d/oracle-instantclient.conf ldconfig
编译安装pdo_oci扩展
不要直接使用系统软件源内置的pdo_oci包,大概率存在版本兼容问题,手动编译最稳妥:
- 拉取对应PHP7.4版本的源码包,解压后进入
ext/pdo_oci目录 - 依次执行以下命令完成编译安装,注意替换路径为你环境实际的PHP7.4相关二进制路径:
/usr/bin/phpize7.4 ./configure --with-pdo-oci=instantclient,/usr/lib/oracle/19.8/client64/lib --with-php-config=/usr/bin/php-config7.4 make && make install
加载扩展并重启服务
Nginx环境下PHP通过php-fpm运行,配置和CLI模式独立,需要分别修改配置:
- 编辑php-fpm对应的php.ini文件(默认路径为
/etc/php/7.4/fpm/php.ini),新增一行配置:extension=pdo_oci.so - 编辑CLI模式对应的php.ini文件(默认路径为
/etc/php/7.4/cli/php.ini),新增同样的扩展加载配置,方便命令行调试 - 依次重启服务让配置生效:
systemctl restart php7.4-fpm nginx -s reload
验证与连接测试
- 验证扩展加载:命令行执行
php -m | grep pdo_oci,如果返回pdo_oci说明扩展加载正常;也可以新建phpinfo页面通过web访问,确认pdo_oci项已显示 - 修正原有连接代码的格式问题:原PDO连接串同时拼接了XE和ORCL两个标识,格式错误,需要先确认RDS实例的服务名/SID后调整,正确的测试代码如下:
<?php try { // 服务名模式连接串格式:oci:dbname=//数据库地址:端口/服务名 // SID模式连接串格式:oci:dbname=//数据库地址:端口:SID $conn = new PDO('oci:dbname=//development.czeika65wu6y.us-east-1.rds.amazonaws.com:1521/ORCL', 'xxxx', 'xxxxx'); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "数据库连接成功"; } catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage(); }
常见坑点:如果重启fpm后还是提示找不到驱动,检查selinux是否开启、Instant Client类库权限是否允许php-fpm进程读取,以及php-fpm启动用户是否有访问Oracle类库目录的权限。
内容的提问来源于stack exchange,提问作者Santanu Basak
相关产品推荐
相关产品推荐

