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日間かかってようやく接続が出来ました・・
繋がったら繋がったでエラー吐きまくりですがめげずにぐぐりましょう。。
コメント