読者です 読者をやめる 読者になる 読者になる

MacOSXにoci8とpdo-ociに対応したPHPを入れる

面倒なことに、Mac標準のPHPはpdo-ociに対応していない。
本来はbrewでオプション指定(brew install php53 --with-pdo-oci)で入れればよいはずなのだが、 何故かうまくいかないのでphp-buildを使って対応版を入れる。

Oracle Instant Clientのインストール

  1. Oracleのサイトから64bit版のモジュールをDLする。
  2. 適当なディレクトリに配置する
    • ~/Applications/instantclient_11_2
  3. 配置したディレクトリをORACLE_HOMEとして登録(実際は.zshrcやらに)

    export ORACLE_HOME=~/Applications/instantclient_11_2

  4. libclntsh.dylibのシンボリックリンク作成

    cd $ORACLE_HOME  
    ln -s libclntsh.dylib.11.1 libclntsh.dylib 

OpenSSLのパッケージインストール

OS標準のものは古いのでhomebrewで入れる。
適当にPATHは調整。

brew install openssl
brew link openssl --force

php-buildのセットアップ

  1. パッケージインストール
    brew install php-build php-version libmcrypt
    
  2. ビルドオプション追加
    /usr/local/share/php-build/default_configure_optionsにオプションを追記する。
    --with-oci8=shared,instantclient,/Users/yotama/Applications/instantclient_11_2,11.2
    --with-pdo-oci=shared,instantclient,/Users/yotama/Applications/instantclient_11_2,11.2
  3. DLするソースのパスが間違ってるので書き換える
    /usr/local/share/php-build/definitions配下に定義ファイルがある。
    ここでは5.3.24を対象とする。
    install_package "http://php.net/distributions/php-5.3.24.tar.bz2"
    ↓
    install_package "http://museum.php.net/php5/php-5.3.24.tar.bz2" 

ビルド実行

第2引数がインストールされるルートディレクトリになる。
今回は、~/local/php/5.3.24配下にインストールする。

php-build 5.3.24 ~/local/php/5.3.24

PATHを通す

今回ビルドしたphpにPATHを通す

export PATH=$HOME/local/php/5.3.24/bin:$PATH

php.ini修正

以下を~/local/php/5.3.24/etc/php.iniに追記

extension=oci8.so
extension=pdo_oci.so

リンクエラーの修正

そのまま実行すると、以下の様な警告がでる。

PHP Warning:  PHP Startup: Unable to load dynamic library '/Users/yotama/local/php/5.3.24/lib/php/extensions/no-debug-non-zts-20090626/oci8.so' - dlopen(/Users/yotama/local/php/5.3.24/lib/php/extensions/no-debug-non-zts-20090626/oci8.so, 9): Library not loaded: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1
  Referenced from: /Users/yotama/local/php/5.3.24/lib/php/extensions/no-debug-non-zts-20090626/oci8.so
  Reason: image not found in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/Users/yotama/local/php/5.3.24/lib/php/extensions/no-debug-non-zts-20090626/pdo_oci.so' - dlopen(/Users/yotama/local/php/5.3.24/lib/php/extensions/no-debug-non-zts-20090626/pdo_oci.so, 9): Library not loaded: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1
  Referenced from: /Users/yotama/local/php/5.3.24/lib/php/extensions/no-debug-non-zts-20090626/pdo_oci.so
  Reason: image not found in Unknown on line 0

動的リンクのパスがおかしいので、install_name_toolで修正する。

cd ~/local/php/5.3.24/lib/php/extensions/no-debug-non-zts-20090626/
sudo install_name_tool -change /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 $ORACLE_HOME/libclntsh.dylib.11.1 oci8.so
sudo install_name_tool -change /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 $ORACLE_HOME/libclntsh.dylib.11.1 pdo_oci.so

他にも依存パスがおかしければ順次修正

確認

$ php -v
PHP 5.3.24 (cli) (built: Jul  7 2014 23:56:35)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
    with Xdebug v2.2.1, Copyright (c) 2002-2012, by Derick Rethans

参考: oci8 - MacでPHPバージョンが切り替えられる開発環境作り - Qiita