PHPでOracleを使う為に必要な5つのこと

開発ツール

PHPからOracleを使うのもMySQL使うのも大差ないだろなんて思っていた時代もありました・・・(´Д`;)ヾ
はまりまくったのでまとめます

1.Oracle InstantClientの導入

PHPにphp-oci8を入れたいだけなのにまずはrpmを入れることが必要になります

Instant Clientのダウンロード


Instant Clientのダウンロード
からインストール先の環境にあったファイルを取得します
CentOS6 64bitにはInstant Client Downloads for Linux x86-64ですね

必要なファイル

oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm ←SQLPlusを使う場合のみ必要
oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm

インストール

「/usr/local/src」配下にダウンロードしたファイルを配置してインストール

~~~
$ cd /usr/local/src/
$ rpm -ivh oracle-instantclient11.2-*.rpm
~~~

参考サイト:Oracle/Instant Client/インストール – PukiWiki

tnsnames.oraによる接続

これをやらないと繋がらない、らしい?
自分も実際繋がらなかったけど、これを下から繋がったのか、これ以外のところでうまく言ったのか不明

tnsnames.oraを使って接続する場合は引用もとのような設定が必要になります

以下のように、Instant Clientがインストールされるディレクトリの配下に
「tnsnames.ora」用のディレクトリを作成して、「tnsnames.ora」を準備します。
※「HOST」、「PORT」、「SID」については、環境に合わせてください。

# mkdir -p /usr/lib/oracle/11.2/client/network/admin
# vi /usr/lib/oracle/11.2/client/network/admin/tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = Oracleサーバのアドレス)(PORT = 1521))
(CONNECT_DATA =
(SID = orcl)
)
)
# chmod 644 /usr/lib/oracle/11.2/client/network/admin/tnsnames.ora

tnsnames.ora接続は別の記事に書きました→tnsnames.oraを参照してPHPをOracleに接続するほうほう | のぶろぐ

2.php-oci8のインストール

すでにPHPがソースでインストールされていた環境なのでpeclでインストールします

~~~
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] :
~~~

今回はwebサーバーとoracleサーバーが別の環境だったので特に何も入力しないで進んでインストール完了
未検証ですが同じサーバーにoracleがある場合
~~~
instantclient,/usr/lib/oracle/11.1/client64/lib/
~~~
と入れるべきらしい
参考リンク:【PHP】Instant Client+peclでoci8(oracle)関数を使えるようにする:地方で活動するweb制作者の日々を綴るblog

完了したらphp.iniに追記します
~~~
extension=oci8.so
~~~

念のためapacheを再起動してから確認します
~~~
php -m

[PHP Modules]
oci8
~~~

3.環境変数の設定

~~~
#vim /usr/apache2/bin/envvars
NLS_LANG=Japanese_Japan.UTF8
#NLS_LANG=Japanese_Japan.JA16SJIS
#NLS_LANG=Japanese_Japan.JA16EUC
export NLS_LANG
~~~
NLS_LANGはPHPのmbstring.internal_encodingに設定してあるものと同じものを設定すること

※yum+centosの場合 /etc/sysconfig/httpd に書く必要がある

4.DB名はグローバルデータベース名

すっごい地味にはまりましたが
orcl.mydomainじゃないとだめでした

5.めげない気持ち

Oracleのインストールから初めて2日間かかってようやく接続が出来ました・・
繋がったら繋がったでエラー吐きまくりですがめげずにぐぐりましょう。。

コメント

タイトルとURLをコピーしました