PHP安装OCI8扩展
admin
2023-02-16 19:20:03
0

一、前言

应项目开发需要,需要连接ORACLE数据库,PHP环境并没有安装OCI8扩展,我们需要自己安装一下。

PHP开发的项目大多数时候都是使用MYSQL,这是第一次使用PHP连接ORACLE,在安装OCI8扩展的时候遇到了很多的坑和问题,借这篇文章记录和分享下经验。

网上也有很多相关的文章供大家参考,但是总感觉缺点什么,这篇文章就当做一个补充。

二、扩展安装

准备工作
首先要了解自己的php版本 oracle版本,确保自己下载的资源适用于你的环境

我这里用的docker环境,php-fpm镜像是从docker hub上拉取的

docker镜像:php:7.2-fpm (PHP版本:7.2.17)

oracle版本:10.2.0.5.0 - 64bi

  1. 依赖软件下载

下在oci8扩展(需要根据php版本下载)PECL :: Package :: oci8请添加链接描述 我这里用的是2.1.1

需要下载oracle client(根据oracle版本下载): Instant Client for Linux x86-64 (64-bit)请添加链接描述

我这里下载的版本是:basic-10.2.0.5.0-linux-x64.zip sdk-10.2.0.5.0-linux-x64.zip

  1. 开始安装

3.1 安装oracle client

把下载好的:basic-10.2.0.5.0-linux-x64.zip sdk-10.2.0.5.0-linux-x64.zip

解压放到/usr/local/instantclient_10_2

basic-10.2.0.5.0-linux-x64.zip sdk-10.2.0.5.0-linux-x64.zip 这两文件解压后的目录是相同的,解压后会直接覆盖,sdk-10.2.0.5.0-linux-x64.zip 其实里面只有个sdk目录,和mv sdk目录到/usr/local/instantclient102相同

这里我创建了两个软链:

ln -s libclntsh.so.10.1 libclntsh.so

ln -s /usr/local/instantclient_10_2 /usr/local/instantclient(第二个软链可以忽略)

软链也可以不创建,在后面位置使用文件的时候,路劲和文件指定没问题就行

环境变量设置很重要!!!!!!!!!!!


临时环境变量配置

设置环境变量:export LD_LIBRARY_PATH="/usr/local/instantclient_10_2"


永久环境变量设置

修改profile文件:

#vi /etc/profile

在里面加入:

export LD_LIBRARY_PATH="/usr/local/instantclient_10_2"

让环境变量立即生效需要执行如下命令:

#source /etc/profile


docker里面,以上两种设置方式都不生效!!!!!!!!

docker设置环境变量需要修改Dockerfile

ENV LD_LIBRARY_PATH="/usr/local/instantclient_10_2"

然后重新编译镜像

确认自己的环境变量是否设置成功,可以通过命令 export -p 查看环境变量,已经看到我的已经设置成功了
PHP安装OCI8扩展

关于环境变量设置也可以参考此文章:Linux里设置环境变量的方法(export PATH)请添加链接描述

3.2 安装oci8扩展

解压下载好的:oci8-2.1.1.tgz

正常编译安装

cd oci8-2.1.1

phpize

./configure --with-oci8=shared,instantclient,/usr/local/instantclient_10_2 (编译这步需要传oracle client地址)

make && make install

到这里PHP如果没报错就安装完成了,如果报错可能是安装的扩展版本不对

执行php -m命令确认扩展是否安装成功,如下图,这里已经安装成功
PHP安装OCI8扩展

3.3 生成基于oci8的php-fpm镜像

我这里是基于镜像安装的扩展,直接提交了份新镜像,然后重新通过docker run -e命令来设置的环境变量,这样在镜像启动后环境变量也不会丢失。

下面是具体命令供参考:

docker commit -a "zhaowenhao" -m "安装oci8扩展" 902e708645d7 zhaowenhao/php-fpm:oci8

docker run -p 9000:9000 -e LD_LIBRARY_PATH="/usr/local/instantclient_10_2" --name php-fpm-oci8 -d zhaowenhao/php-fpm:oci8

图片仅供参考:
PHP安装OCI8扩展

  1. 测试安装是否成功

通过运行如下php命令来确认是否连接oracle成功,不抛异常错误,说明连接成功。

php -r "oci_connect('用户名','密码', 'IP地址/数据库名称');";

三、总结

此次安装oci8扩展遇到的问题几点

oracle client版本不对
oci8扩展版本不对
环境变量未设置(这个最重要!!!!)
不设置环境变量oci8扩展也能安装成功,但是在启动PHP的时候会报unable to load dynamic library oci8.so,如下图是具体的报错信息

PHP安装OCI8扩展

相关内容

热门资讯

伊朗总统办公室主任:总统与革命... 新华社德黑兰5月5日电(记者陈霄 沙达提) 据伊朗塔斯尼姆通讯社5日报道,伊朗总统办公室主任哈吉·米...
人民日报:任何企图否定东京审判... 原标题:捍卫历史正义 维护国际秩序——写在东京审判开庭80周年之际钟 佳 黄惠康 《人民日报》(20...
中学生进大厂体验:1个月拿了1... 中学生进大厂体验:1个月拿了1.5万  【中学生进大厂体验:1个月拿了1.5万】2024年年初,19...
多位省委书记省长会见王传福 从... 多位省委书记省长会见王传福  【多位省委书记省长会见王传福】4月27日,河南省委书记刘宁在郑州会见比...
上海汇正财经服务费能退吗?震荡...   部分投资者关心上海汇正财经服务费能退吗,但在二季度A股震荡加剧、地缘与油价双重扰动的复杂环境下,...
市场稀缺权益来袭!从全球急难救...   现在信用卡的功能越来越细化,也越来越人性化了,比如平安银行信用卡新推出的以“一生守护 十分平安”...
美官员:美商船穿越霍尔木兹海峡... 当地时间5月5日,央视记者获悉,两艘搭载美军安全队员的美国商船在通过霍尔木兹海峡期间曾遭伊朗袭击。美...
日本参议员:对俄制裁损害日本国... 正在俄罗斯访问的日本国会参议员铃木宗男5月5日对媒体表示,日本对俄制裁同样损害了日本国家利益。铃木说...
美国务卿称美国正推进对伊朗“极... △美国国务卿鲁比奥(资料图)当地时间5月5日,美国国务卿鲁比奥在媒体简报会上称,美军正在霍尔木兹海峡...
伊朗外交部:敦促美方在外交问题... △伊朗外交部发言人巴加埃(资料图)据伊朗方面5月5日消息,伊朗外交部发言人巴加埃就当前伊美谈判进程表...