PHP 安装 PDO_OCI 扩展,Ubuntu下

PHP 连接到 Oracle 数据库和 PHP 连接 Mysql 类似,都需要安装对应的 pdo 驱动,但在安装 Oracle 的扩展时经常会出现问题,故记之。
PDO_OCI 扩展可以在 PHP 源码中 ext/pdo_oci 中安装,也可以在 pecl 扩展库中下载安装。pecl 中扩展已经不在维护,所以需要修改编译的文件(config.m4)。
PDO_OCI 扩展安装前,需要先安装 oci8 扩展和 Oracle Instantclient客户端。Oracle Instantclient 提供连接本地或者远程 Oracle 数据库的功能。

准备

  1. 下载 Oracle Instantclient ,包括2个文件:Basic、SDK 。下载你机器对应的版本。地址:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
    我下载的文件是
instantclient-basic-linux.x64-12.2.0.1.0.zip
instantclient-sdk-linux.x64-12.2.0.1.0.zip
  1. 下载 oracle 数据库的扩展 oci8。
    https://pecl.php.net/package/oci8

安装 Oracle Instantclient

解压 Oracle Instantcient ,并创建必要的软连接(注意你下载的文件的版本,可能与文章的不同)。

mkdir -p /opt/oracle
mv ~/downloads/instantclient-*.zip /opt/oracle/
cd /opt/oracle
unzip instantclient-basic-linux.x64-12.2.0.1.0.zip
unzip instantclient-sdk-linux.x64-12.2.0.1.0.zip

sudo mv instantclient_12_2 instantclient
cd instantclient
sudo ln -s /opt/oracle/instantclient/libclntsh.so.12.1 /opt/oracle/instantclient/libclntsh.so
sudo ln -s /opt/oracle/instantclient/libocci.so.12.1 /opt/oracle/instantclient/libocci.so
sudo ln -s /opt/oracle/instantclient/ /opt/oracle/instantclient/lib

sudo mkdir -p include/oracle/12.2/
cd include/oracle/12.2/
sudo ln -s ../../../sdk/include client
cd -

sudo mkdir -p lib/oracle/12.2/client
cd lib/oracle/12.2/client
sudo ln -s ../../../ lib
cd -

mkdir -p /opt/oracle/instantclient/lib/oracle/12.2
ln -s /opt/oracle/instantclient/sdk  /opt/oracle/instantclient/lib/oracle/12.2/client
ln -s /opt/oracle/instantclient  /opt/oracle/instantclient/lib/oracle/12.2/client/lib

echo /opt/oracle/instantclient/ | sudo tee -a /etc/ld.so.conf.d/oracle.conf
sudo ldconfig

sudo apt-get install libaio1

安装 oci8 扩展

需要先安装 oci8,才能安装 pdo_oci

sudo tar -xvzf oci8-2.0.12.tgz
cd oci8-2.0.12
sudo /usr/local/bin/phpize
sudo ./configure --with-oci8=instantclient,/opt/oracle/instantclient/ --with-php-config=/usr/bin/php-config5.6
sudo make
sudo make install

安装 pdo_oci 扩展

进入 php 源码的 ext/pdo_oci 文件夹

sudo /usr/local/bin/phpize
sudo ./configure --with-pdo-oci=instantclient,/opt/oracle/instantclient,12.2 --with-php-config=/usr/local/bin/php-config
sudo make
sudo make install
echo extension=pdo_oci.so | sudo tee -a /etc/php5.6.32/conf.d/pdo_oci.ini

使用 PDO_OCI 扩展包安装

在 pecl 中下载最新的扩展包。

tar xvf PDO_OCI-1.0.tgz
cd PDO_OCI-1.0

在扩展包中 config.m4 文件中添加(查询关键字PDO_OCI_VERSION、PHP_ADD_LIBRARY):

elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.12.2; then
      PDO_OCI_VERSION=12.2 
12.2)
        PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
        ;;

修改扩展包中 pdo_oci.c 文件:

sed -i -e 's/function_entry pdo_oci_functions/zend_function_entry pdo_oci_functions/' pdo_oci.c

继续安装,步骤与在源码的扩展中安装一致。

使用

getMessage());
}

连接正常。

https://stackoverflow.com/questions/21936091/how-to-install-oracle-instantclient-and-pdo-oci-on-ubuntu-machine
https://shiki.me/blog/installing-pdo_oci-and-oci8-php-extensions-on-centos-6-4-64bit
http://php.net/manual/en/ref.pdo-oci.php
https://shiki.me/blog/installing-pdo_oci-and-oci8-php-extensions-on-centos-6-4-64bit

你可能感兴趣的:(PHP 安装 PDO_OCI 扩展,Ubuntu下)