#環境
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を使って接続確認
$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にインスタンスを作ってしまった事です....。