1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-03-15

#環境
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/

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?