一、背景介绍
CRMEB 是一款基于 ThinkPHP 开发的电商系统,默认使用 MySQL 数据库。因对接其他ERP产品需求,需要连接多个数据库,其中一个就是oracle。一开始直接在宝塔后台安装扩展oci8以及pdo_oci扩展,显示安装成功但是phpinfo中无法加载。最终有了这篇开坑笔记。
过程中遇到了诸多环境配置和兼容性问题,特此记录解决方案,供其他开发者参考。
![图片[1]-CRMEB(thinkphp6.0)连接oracle数据库 踩坑笔记-牧鸭人博客](https://img.muyaren.com/wp-content/uploads/2025/06/20250626163158297.webp)
二、环境准备
- 服务器环境
- 操作系统:debian 11
- Web 服务:Nginx 1.26
- PHP 版本:7.4.33
- 所需扩展
- OCI8:PHP 连接 Oracle 的原生扩展
- PDO_OCI:PDO 驱动连接 Oracle
三、配置过程
1.安装oracle-instantclient 即时客户端库
首先到oracle官网下载三个文件:
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
分别是:basic、devel、sqlplus
2.在服务器建立oracle文件夹,位置如下
![图片[2]-CRMEB(thinkphp6.0)连接oracle数据库 踩坑笔记-牧鸭人博客](https://img.muyaren.com/wp-content/uploads/2025/06/20250626164003290.webp)
3.打开终端,进入oracle文件夹中
cd /usr/lib/oracle
4.安装alien和依赖包
sudo apt-get install alien libaio1
sudo alien -i oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
sudo alien -i oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm
sudo alien -i oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm
5.以上操作完成后,会生成一个12.1/client64/lib 的文件目录
6.安装php oracle扩展:oci8
下载oci8的对应扩展包,http://pecl.php.net/package/oci8,我们php的版本是7,所以选择下载2.2.0版本
![图片[3]-CRMEB(thinkphp6.0)连接oracle数据库 踩坑笔记-牧鸭人博客](https://img.muyaren.com/wp-content/uploads/2025/06/20250626164444366.png)
解压后,上传到oracle文件夹里
![图片[4]-CRMEB(thinkphp6.0)连接oracle数据库 踩坑笔记-牧鸭人博客](https://img.muyaren.com/wp-content/uploads/2025/06/20250626164622354.webp)
在终端中打开该文件夹
cd /usr/lib/oracle/oci8-2.2.0
![图片[5]-CRMEB(thinkphp6.0)连接oracle数据库 踩坑笔记-牧鸭人博客](https://img.muyaren.com/wp-content/uploads/2025/06/20250626164744880.png)
然后继续执行下面的代码
./configure --with-php-config=/www/server/php/74/bin/php-config --with-oci8=shared,instantclient,/usr/lib/oracle/12.1/client64/lib
![图片[6]-CRMEB(thinkphp6.0)连接oracle数据库 踩坑笔记-牧鸭人博客](https://img.muyaren.com/wp-content/uploads/2025/06/20250626164905203.png)
make && make install
一切顺利的话,最后一行会输出一行oci8.so文件的路径
![图片[7]-CRMEB(thinkphp6.0)连接oracle数据库 踩坑笔记-牧鸭人博客](https://img.muyaren.com/wp-content/uploads/2025/06/20250626165050368.png)
7.前往宝塔PHP设置,查看php.ini文件是否引入
![图片[8]-CRMEB(thinkphp6.0)连接oracle数据库 踩坑笔记-牧鸭人博客](https://img.muyaren.com/wp-content/uploads/2025/06/20250626165220834.png)
重载配置,然后重启php,检查phpinfo中是否有oci8配置
![图片[9]-CRMEB(thinkphp6.0)连接oracle数据库 踩坑笔记-牧鸭人博客](https://img.muyaren.com/wp-content/uploads/2025/06/20250626165330928.webp)
8.安装pdo_oci,正常通过在线方式安装是安装不上的,这也是我踩坑的关键。
![图片[10]-CRMEB(thinkphp6.0)连接oracle数据库 踩坑笔记-牧鸭人博客](https://img.muyaren.com/wp-content/uploads/2025/06/20250626165535580.png)
一共就2个版本 1.0 1.10
![图片[11]-CRMEB(thinkphp6.0)连接oracle数据库 踩坑笔记-牧鸭人博客](https://img.muyaren.com/wp-content/uploads/2025/06/20250626165557154.png)
1.0 安装条件 5.03<= php <=6.0.0
![图片[12]-CRMEB(thinkphp6.0)连接oracle数据库 踩坑笔记-牧鸭人博客](https://img.muyaren.com/wp-content/uploads/2025/06/20250626165609478.png)
1.1.0 安装条件 8.3<= php
😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂
解决办法,通过php代码仓库找到扩展组件pdo_oci,上传至服务器进行编译安装
![图片[13]-CRMEB(thinkphp6.0)连接oracle数据库 踩坑笔记-牧鸭人博客](https://img.muyaren.com/wp-content/uploads/2025/06/20250626170104216.webp)
/www/server/php/74/bin/phpize
./configure --with-php-config=/www/server/php/74/bin/php-config --with-pdo_oci=shared,instantclient,/usr/lib/oracle/12.1/client64/lib
三、thinkphp添加oracle数据量连接
'oracle' => [
'type' => 'oracle',
'hostname' => '连接地址',
'database' => '实例名',
'username' => '用户名',
'password' => '密码',
'hostport' => '端口号',
'dsn' => "oci:dbname=//连接地址:端口号/实例名;charset=UTF8",
'params' => [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_TIMEOUT => 30, // 连接超时时间(秒)
],
'charset' => 'UTF8', // Oracle 常用字符集是 UTF8 或 AL32UTF8
'prefix' => '',
'persistent' => false, // 禁用持久连接,避免潜在问题
'options' => [
// 其他 PDO 选项
],
],
四、常见问题及解决方案
1、连接错误:SQLSTATE[HY000]: OCISessionBegin: ORA-21561: OID generation failed
原因:系统主机名配置不正确
解决方案:
配置正确的主机名映射:
vi /etc/hosts
# 添加:127.0.0.1 localhost your_hostname
暂无评论内容