您好,登錄后才能下訂單哦!
一、前言
應項目開發需要,需要連接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
下在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版本不對
oci8擴展版本不對
環境變量未設置(這個最重要!!!!)
不設置環境變量oci8擴展也能安裝成功,但是在啟動PHP的時候會報unable to load dynamic library oci8.so,如下圖是具體的報錯信息
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。