AWS
RDS
oci8
centos7
PHP7

AWS+CentOS7+PHP7.1+oci8-2.1.8 でRDSオラクルに接続


環境

AWS EC2インスタンス

Centos7.6.1810

PHP7.1.26

Apache2.4.6

oci2.1.8

--接続先--

RDS Oracle 12.1.0.2.v5


前提

接続先のRDSと同じVPC内にEC2インスタンスをたてる(※私がハマったポイントです..)

それでは順にご紹介させていただきます!


1: Instant Clientをダウンロード

・下記公式サイトにアクセス

https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

・下記2つのファイルをダウンロードして、/tmpに保存。

oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm

oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm


2: 準備

# yum install libaio

※これがないと怒られた......

# cd /tmp
※先ほどInstant Client保存した場所に移動

# rpm -ivh oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
# rpm -ivh oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm

・tnsnames.oraファイルを作成する

# mkdir -p /usr/lib/oracle/12.2/client64/network/admin

# vi /usr/lib/oracle/12.2/client64/network/admin/tnsnames.ora

※下記を追加して保存
[DBName] =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = [エンドポイント])(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)

・パスを通す

#vi /etc/profile

※下記を追加して保存
export ORACLE_HOME=/usr/lib/oracle/12.2/client64/lib
export NLS_LANG=Japanese_Japan.AL32UTF8
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME:$PATH

# source /etc/profile
※強制反映

・DTraceサポートを有効にする

# yum -y install systemtap-sdt-devel

# export PHP_DTRACE=yes
# pecl channel-update pecl.php.net
※これがないとこの後怒られる
# yum -y install gcc
※またまたこれもないとこの後怒られてしまう


3:OCI8のインストール

# pecl install oci8-2.1.8 ※バージョン指定

途中プロントが出てきますので下記入力
instantclient,/usr/lib/oracle/12.2/client64/lib

・php.iniに設定

# vi /etc/php.ini

extension=oci8.so ※追加

# systemctl restart httpd.service ※Apache再起動
# php -m | grep oci ※モジュールが読み込まれているか確認
oci8

# php --rf oci_connect ※「oci_connect」関数が存在するかチェック。
Function [ <internal:oci8> function oci_connect ] {

- Parameters [5] {
Parameter #0 [ <required> $username ]
Parameter #1 [ <required> $password ]
Parameter #2 [ <optional> $connection_string ]
Parameter #3 [ <optional> $character_set ]
Parameter #4 [ <optional> $session_mode ]
}
}

・ここまでで接続可能になっているはず!

phpinfo.phpにもoci8が表示されています。


4:PHPを使って接続確認


oci8_test.php


$conn = oci_connect('[ユーザー名]','[パスワード]','[エンドポイント]/orcl','AL32UTF8');

if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}else{
echo "接続完了!";
}


画面に「接続完了!」とでたら成功です!!!!

私が一番ハマったのは、前述したようにRDSのVPCと別のVPCにインスタンスを作ってしまった事です....。

参考URL

https://mike-neko.github.io/blog/oracle-cent/