PDO_OCI のインストール(CentOS7対応)


(2014.10.29) PHP から Oracle を使う際に PDO_OCI を使いたかったのですが、 RPM パッケージを提供してくれるところを見つけられなかったので 自前構築した時のメモです。なお CentOS 6.3 の時代に評価した結果はこちらです(すでに現状と合わなくなっている可能性があります)。

(2015.07.22) oci8 のインストールが抜けていたので追加。

例示におけるプラットフォームには CentOS 7.0(64bit) を使っています。他の OS やディストリビューションをお使いの方は、yumなど固有のコマンド名を適宜読み替えてください。

PDO(PHP Data Objects)は PHP 5.1 から標準でバンドルされている、各種データベースへのアクセスを抽象化するインターフェースです。これを使うと複数の RDBMS に対して同じ方法でアクセスできます。これを使う場合は php-pdo というパッケージをインストールします。

PDO を使うにしろ使わないにしろ、データベースを使う限りは下位のネイティブドライバーが必要です。たとえば PHP で PostgreSQL を使う場合、php-pgsql パッケージを導入します。php-pgsql の場合はその中に pdo_pgsql モジュールが含まれているので、PostgreSQL の場合はネイティブドライバー(*1)経由でも PDO 経由でもそのまま使えます。

hotta:~$ rpm -ql php-pgsql
/etc/php.d/pdo_pgsql.ini
/etc/php.d/pgsql.ini
/usr/lib64/php/modules/pdo_pgsql.so
/usr/lib64/php/modules/pgsql.so

ところが RDBMS として Oracle を使いたい場合は、ライセンスの関係なのか、php-oracle のようなパッケージは公式のリポジトリでは提供されていないようです(*2)。ただ yum にこだわらなければネイティブドライバーとして Oracle Database Instant Client を利用できます。これは Oracle から無償で公開されているライブラリとユーティリティーです。

(*1)…pg_connect() 関数で接続する方式

(*2)…Oracle Linux 用の PHP パッケージというのはあるようですが、試していません。

1.PHP のインストール

まずはベースとなる php を導入します。ここに記載してあるすべてを入れる必要はありませんが、後から別パッケージの導入やビルド時に必要になるので、少なくとも php-pear / php-devel / php-pdo あたりは入れておく必要があるでしょう。

できれば最新の PHP-5.6 にしたいので、リポジトリとして Webtatic を使用しています。自己責任でお使いください。

root:~# yum install http://mirror.webtatic.com/yum/el7/webtatic-release.rpm
root:~# yum install \
php56w-cli  \
php56w-common   \
php56w-devel    \
php56w-enchant  \
php56w-gd       \
php56w-fpm      \
php56w-intl     \
php56w-ldap     \
php56w-mbstring \
php56w-mcrypt   \
php56w-mysqlnd  \
php56w-opcache  \
php56w-pdo      \
php56w-pear     \
php56w-pecl-xdebug  \
php56w-pgsql    \
php56w-phpdbg   \
php56w-process  \
php56w-soap     \
php56w-xml      \
php56w-xmlrpc
root:~# rpm -qa|grep ^php
php56w-5.6.2-1.w7.x86_64
php56w-cli-5.6.2-1.w7.x86_64
php56w-common-5.6.2-1.w7.x86_64
php56w-devel-5.6.2-1.w7.x86_64
php56w-enchant-5.6.2-1.w7.x86_64
php56w-gd-5.6.2-1.w7.x86_64
php56w-intl-5.6.2-1.w7.x86_64
php56w-ldap-5.6.2-1.w7.x86_64
php56w-mbstring-5.6.2-1.w7.x86_64
php56w-mcrypt-5.6.2-1.w7.x86_64
php56w-mysqlnd-5.6.2-1.w7.x86_64
php56w-opcache-5.6.2-1.w7.x86_64
php56w-pdo-5.6.2-1.w7.x86_64
php56w-pear-1.9.4-2.w7.noarch
php56w-pecl-xdebug-2.2.5-1.w7.x86_64
php56w-pgsql-5.6.2-1.w7.x86_64
php56w-process-5.6.2-1.w7.x86_64
php56w-soap-5.6.2-1.w7.x86_64
php56w-xml-5.6.2-1.w7.x86_64
php56w-xmlrpc-5.6.2-1.w7.x86_64

2.Oracle Instant Client のインストール

Instant Client Downloads for Linux x86-64のページから必要なパッケージをダウンロードしてから導入してください。今回は以下のものをインストールしました。

root:~# rpm -Uvh oracle*
root:~# rpm -qa|grep ^oracle
oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64
oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64
oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64

各アプリケーションが Oracle ライブラリを自動でロードできるように、おまじないを入れておきます。

root:~# echo /usr/lib/oracle/12.1/client64/lib > /etc/ld.so.conf.d/oracle-instant-client.conf

3.OCI8 のインストール

OCI(Oracle Call Interface)は Oracle とのネイティブ接続を行うための API です。OCI8 拡張は PHP コアのソースには含まれておらず、PECLにあります。

root:~# pecl install oci8

4.PDO_OCI のインストール

PDO_OCI は PDO 抽象化レイヤー配下で OCI 接続を実現するためのドライバで、下請けとして OCI8 を使用します。PHP_OCI は 2005 年から開発が止まっており、そのままでは動きませんので、パッチを当てたものを GitHub に置いてあります。

gcc 等が入っていなければ、事前に入れておいてください。

$ git clone https://github.com/hotta/pdo_oci
$ cd pdo_oci
$ phpize
$ ./configure \
    --prefix=/usr \
    --exec-prefix=/usr \
    --with-php-config=php-config \
    --with-pdo-oci=instantclient,/usr,12.1
$ make
$ sudo make install
$ sudo cat > /etc/php.d/pdo_oci.ini <<__
; Enable oci extension module
extension=pdo_oci.so
__

これで pdo_oci が使えるようになりました。

root:~# php -m|grep -i pdo_oci
PDO_OCI

5.(おまけ)rlwrap のインストール

rlwrap は ReadLine 非対応のプログラムを ReadLine 対応にするものです。 これを入れると sqlplus でコマンド/SQL ヒストリが使えるようになりますが、 残念ながら CentOS7 対応の RPM は見つけられませんでした。 パッケージ作るだけの元気がないので、とりあえず待つことにします。使い方等は CentOS6 向けの情報を参考にしてください。

Go previous Go ahead Go up