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

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

使用

<?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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342