PHP安装OCI8扩展
一、前言
应项目开发需要,需要连接ORACLE数据库,PHP环境并没有安装OCI8扩展,我们需要自己安装一下。 PHP开发的项目大多数时候都是使用MYSQL,这是第一次使用PHP连接ORACLE,在安装OCI8扩展的时候遇到了很多的坑和问题,借这篇文章记录和分享下经验。 网上也有很多相关的文章供大家参考,但是总感觉缺点什么,这篇文章就当做一个补充。 二、扩展安装 准备工作 我这里用的docker环境,php-fpm镜像是从docker hub上拉取的 docker镜像:php:7.2-fpm (PHP版本:7.2.17) oracle版本:10.2.0.5.0 - 64bi
下在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
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 查看环境变量,已经看到我的已经设置成功了 关于环境变量设置也可以参考此文章: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命令确认扩展是否安装成功,如下图,这里已经安装成功 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命令来确认是否连接oracle成功,不抛异常错误,说明连接成功。 php -r "oci_connect(‘用户名‘,‘密码‘,‘IP地址/数据库名称‘);"; 三、总结 此次安装oci8扩展遇到的问题几点 oracle client版本不对 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |