美文网首页Thinkphp
PHP 安装 PDO_OCI 扩展,Ubuntu下

PHP 安装 PDO_OCI 扩展,Ubuntu下

作者: yangjingqzp | 来源:发表于2017-12-23 07:49 被阅读0次

    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
    

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

    使用

    <?php
    
    $db_username = "youusername";
    $db_password = "yourpassword";
    $db = "oci:dbname=yoursid";
    try {
        $conn = new PDO($db,$db_username,$db_password);
    } catch (\PDOException $e) {
        echo ($e->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下

        本文链接:https://www.haomeiwen.com/subject/dkuvwxtx.html