MAMPのPHPにoci8およびpdo_ociをインストールするには


以下のQiitaの記事を参考にMAMPのPHPからOracleに接続できるようにしてみました。
MacOSX – Macにoci8をインストールする – Qiita
oracle – yumで入れたPHPにoci8とpdo_ociを入れる – Qiita
Setting up MAMP, PEAR, PECL, and PHPUnit on Lion. – Taylor Otwell

MAMPは、インストールにOracleへの接続関数oci_connectPDOからのOracle接続は含まれていません。
Oracleへの接続を有効にするには、以下の拡張ライブラリを追加する必要があります。

  • oci_connectはoci8.so
  • PDOによる接続にはpdo_oci

拡張ライブラリはPECLかソースコンパイルで追加することができます。
また、ライブラリのコンパイルにはOracle Instant Clientが必要です。

以下、Oracle Instant Clientの準備から各拡張ライブラリのインストール、Apache起動時に環境変数を追加する設定まで解説します。

Oracle Instant Clientを準備
http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html
から64bit版の以下のファイルをダウンロードして同じ場所に解凍します。

  • instantclient-basic-macos.x64-11.2.0.4.0.zip
  • instantclient-sdk-macos.x64-11.2.0.4.0.zip
  • instantclient-sqlplus-macos.x64-11.2.0.4.0.zip

展開して/opt/local/libにおきました。

$ cd ~/Downloads
$ unzip instantclient-basic-macos.x64-11.2.0.4.0.zip
$ unzip instantclient-sdk-macos.x64-11.2.0.4.0.zip
$ unzip instantclient-sqlplus-macos.x64-11.2.0.4.0.zip
$ sudo mv instantclient_11_2 /opt/local/lib

以下のシンボリックリンクをはる必要があります。
無い場合はコンパイル時にエラーメッセージで教えてくれます。

$ ln -s /opt/local/lib/instantclient_11_2/libclntsh.dylib.11.1 /opt/local/lib/instantclient_11_2/libclntsh.dylib

ライブラリへのパスを.bash_profileに追加します。

# .bash_profile
export ORACLE_HOME=/opt/local/lib/instantclient_11_2
export DYLD_LIBRARY_PATH=$ORACLE_HOME
export PATH=$ORACLE_HOME:$PATH

変更を適用します。

$ source .bash_profile

php.hの用意
oci8とpdo_ociはpeclを実行でコンパイルが実行されるのでphp.hが必要です。
利用しているバージョン5.5.3のPHPソースをhttp://museum.php.net/php5/からダウンロードして所定のディレクトリに配置しconfigureだけ実行しておきます。

$ cd /Applications/MAMP/bin/php/php5.5.3/
$ curl http://museum.php.net/php5/php-5.5.3.tar.gz > php-5.5.3.tar.gz
$ tar xvfz php-5.5.3.tar.gz
$ mv php-5.5.3 php
$ cd php
$ ./configure

oci8のインストール
pece installコマンドでoci8をインストールします。
Oracle Instant Clientの情報を入力するプロンプトでは「instantclient,/opt/local/lib/instantclient_11_2」を入力します。

$ pecl install oci8
...
Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] : instantclient,/opt/local/lib/instantclient_11_2
...
Build process completed successfully
Installing '/Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212/oci8.so'
install ok: channel://pecl.php.net/oci8-2.0.8
configuration option "php_ini" is not set to php.ini location
You should add "extension=oci8.so" to php.ini

oci8.soが生成されたのでphp.iniにセットします。

# php.ini
extension=oci8.so

インストールを確認

$ php --ri oci8

oci8

OCI8 Support => enabled
OCI8 DTrace Support => disabled
OCI8 Version => 2.0.8
Revision => $Id: f04114d4d67cffea4cdc2ed3b7f0229c2caa5016 $
Oracle Run-time Client Library Version => 11.2.0.4.0
Oracle Compile-time Instant Client Version => 11.2

Directive => Local Value => Master Value
oci8.max_persistent => -1 => -1
oci8.persistent_timeout => -1 => -1
oci8.ping_interval => 60 => 60
oci8.privileged_connect => Off => Off
oci8.statement_cache_size => 20 => 20
oci8.default_prefetch => 100 => 100
oci8.old_oci_close_semantics => Off => Off
oci8.connection_class => no value => no value
oci8.events => Off => Off

Statistics =>  
Active Persistent Connections => 0
Active Connections => 0

pdo_ociのインストール
peclでインストールするとphpizeのエラーが発生

running: phpize
Cannot find config.m4.
Make sure that you run '/Applications/MAMP/bin/php/php5.5.3/bin/phpize' in the top level source directory of the module

ERROR: `phpize' failed

修正方法がすぐにわからなかったので普通にコンパイルしてインストールしました。

$ cd /Applications/MAMP/bin/php/php5.5.3/include/php/ext/pdo_oci
$ phpize
$ ./configure --with-pdo_oci=shared,instantclient,/Users/hrendoh/instantclient_11_2,11.2
$ make
$ make install

php.iniにpdo_oci.soを追加

# php.ini
extension=pdo_oci.so

Apacheの起動時の環境変数を設定
MAMPの管理クライアントでApacheを起動した時にも、OCI8用の環境変数が追加されるように設定します。

# /Applications/MAMP/Library/bin/envvars
export ORACLE_HOME=/opt/local/lib/instantclient_11_2
export DYLD_LIBRARY_PATH=$ORACLE_HOME
,