環境
CentOS7.2 64bit
PHP7.2
前提
Apache, PHP7(PDOモジュール)がインストールされている事。
yum -y install php-devel にて phpize が使用できる状態である事。
今回追加する内容
Instant Client18.3
oci8
pdo_oci
準備
Instant Clientの設置
ファイルの取得
Oracleのサイトから下記zipを落としてくる。
http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
- instantclient-basic-linux.x64-18.3.0.0.0.zip
- instantclient-sdk-linux.x64-18.3.0.0.0.zip
CentOS内の適当なディレクトリに配置する(/tmpとか)。
解凍、設置
上記zipを設置したディレクトリに移動して解凍。
unzip instantclient-basic-linux.x64-18.3.0.0.0dbru.zip
unzip instantclient-sdk-linux.x64-18.3.0.0.0dbru.zip
解凍したら移動する。
mv instantclient_18_3 /opt/oracle/
注)/opt/oracleフォルダ下にinstantclient_18_3のファイルが移動する。
シンボリックリンクをはる。
cd /opt/oracle
ln -s libclntsh.so.11.1 libclntsh.so
/etc/profileに追記し、必要なPATHを通す。
export PHP_DTRACE=yes
export ORACLE_HOME=/opt/oracle
export NLS_LANG=Japanese_Japan.AL32UTF8
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME:$PATH
反映。
source /etc/profile
ApacheにもPATHを通すために、/etc/sysconfig/httpdを編集する。
最後に追加
export ORACLE_HOME=/opt/oracle
export LD_LIBRARY_PATH=$ORACLE_HOME
service httpd restart
ここまでで設定したPATHが通っているかを確認する。
httpdに追加したPATHは、phpinfo内のEnvironment(Apache Environmentではない)で確認できる。
PHPソースの用意
DTraceサポートを有効にする。
/etc/profileに追記し、反映。
yum -y install systemtap-sdt-devel
export PHP_DTRACE=yes
今インストールされているPHPと同じバージョンのソースを取ってくる&解凍する。
本解説では7.2。
cd ~/
wget http://jp2.php.net/get/php-7.2.9.tar.gz/from/this/mirror
tar xzvf mirror
oci8のインストール
移動して、configureとmakeとmake install。
cd php-7.2.9/ext/oci8/
phpize
./configure --with-oci8=shared,instantclient,/opt/oracle,18.3
make
make install
php.iniに追加するのではなく、iniファイルを下記場所に追加する。
/etc/php.d/oci8.ini
extension=oci8.so
Apache再起動。
service httpd restart
phpinfoでoci8が有効になっていることを確認する。
pdo_ociのインストール
cd php-7.2.9/ext/pdo_oci/
phpize
./configure --with-pdo_oci=shared,instantclient,/opt/oracle,18.3
make
make install
oci8と同様に、iniファイルを追加する。
/etc/php.d/pdo_oci.ini
extension=pdo_oci.so
Apache再起動。
service httpd restart
phpinfoでpdo_ociが有効になっていることを確認する。
確認用PHPソース
/var/www/html/pdo_oci.php
<?php
define("DB_HOST", "##host name##");
define("DB_PORT", "##port##"); // デフォルト1521
define("DB_USERNAME", "##schema name##");
define("DB_PASSWORD", "##password##");
define("DB_SID", "##sid##");
try {
$dbh = new PDO("oci:dbname=//".DB_HOST.":".DB_PORT."/".DB_SID, DB_USERNAME, DB_PASSWORD);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
die($e->getMessage());
}
echo 'OK';
exit(0);
続きの読み物
PHP7で接続する事により、既存ORACLEのデータを利用しながら新システムを構築する事ができるようになります。次のステップとして、Oracle12cの運用の理解の一助になればと思いここに書籍を紹介させて頂います。