背景
最近因為項目研究了一下PHP集成Oracle,雖然這個組合很奇葩,但萬一用到請勿采坑~
環境
- CentOS Linux release 7.3.1611 (Core)
- PHP7.1.1
安裝oracle組件
下載 http://www.oracle.com/technet...
oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm
PS: 兩個都必須安裝,devel版本就是SDK
安裝
# rpm -i oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
# rpm -i oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm
安裝成功會生成如下目錄,64位系統必須軟連接成舊版(否則編譯報版本不支持的錯,應該是歷史問題,坑1)
# ln /usr/lib/oracle/12.2 /usr/lib/oracle/10.2.0.1
# ln /usr/include/oracle/12.2 /usr/include/oracle/10.2.0.1
添加環境變量
# vi etc/profile
加入
export ORACLE_HOME=/usr/lib/oracle/11.2/client64/
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64:$LD_LIBRARY_PATH
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
生效
# source /etc/profile
編譯安裝oci8和pdo_oci
下載最新的包
oci8-2.1.8.tgz和PDO_OCI-1.0.tgz
編譯安裝oci8
# tar -zxf oci8-2.1.8.tgz
# cd oci8-2.1.8
# phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-oci8=shared,instantclient,/usr/lib/oracle/12.2/client64/lib
# make
# make install
生成oci8.so即成功
編譯安裝pdo_oci
# tar -zxf PDO_OCI-1.0.tgz
# cd PDO_OCI-1.0
# phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-oci=instantclient,/usr,10.2.0.1
# make
# make install
生成pdo_oci.so即成功
打開PHP擴展
具體方式根據PHP環境而定,我的環境不需要改變so文件路徑,使用生成的默認路徑即可,只需要添加Additional .ini files到/usr/local/php/etc/php.d/,重啟生效
確認生效狀態
# php -m | grep -e oci8 -e PDO_OCI
oci8
PDO_OCI
大功告成
PS
由於編譯安裝下載的pdo_oci總是報錯(坑2),於是到php.net下載了對應版本的php(比如:http://us1.php.net/get/php-7....),拷貝ext目錄下的pdo_oci編譯安裝,步驟同上。