以下の内容はhttps://engineeringnote.hateblo.jp/entry/database/oracle/oci8-installより取得しました。


PHPからOracle Database 12c Release 2(12.2.0.1)への接続設定

oracle 12c

本記事は、PHPからOracle Database 12c Release 2(12.2.0.1.0)へOCI(Oracle Call Interface)を利用して接続するための設定メモになります。

  

 

事前準備

事前準備として、前回インストールしたLinux環境(CentOS7)上のOracle Database 12c Release 2(12.2.0.1.0)のPDBを利用します。

 

 

 

 

パッケージのダウンロード

Oracle Instant Clientのダウンロード

以下のOracle公式サイトからOracle Instant Clientのrpmファイルをダウンロードします。

 

 

 

sqlplusは無くても大丈夫ですが、後々perlのDBD::Oracleをインストールする際に必要になるので、ついでにダウンロードとインストールもしておきます。

 

OCI8のダウンロード

以下のPECL(ピクル)からOCI8のtgzファイルをダウンロードします。

なお、今回はphp.5.4.16-46のバージョンを利用しますので、最新のOCI8ではPHPのVersion7以降しかサポートしないため、oci8-2.0.12.tgzをダウンロードします。

 

https://pecl.php.net/package/oci8/

 

  • oci8-2.0.12.tgz

 

PHPのインストール

まずyumからPHPとOCIに必要なパッケージも併せてインストールします。

 

 > yum -y install php \
 php-pear \
 php-cli \
 php-devel 

 

上記でPHPをインストールすると依存関係のあるhttpdも一緒にインストールされるので(未インストールの場合)、起動とポートの開放をしておきます。

 

 > service httpd start
 > firewall-cmd --add-service=http --permanent
 > firewall-cmd --reload

 

Oracle Instant Clientのインストール

次にOracle Instant Clientをインストールします。

 

 > rpm -ivh 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 \
 oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm

 

OCI8のインストール

最後にOCI8をインストールします。

 

 > echo "extension=oci8.so" > /etc/php.d/90_oci8.ini
 > C_INCLUDE_PATH=/usr/lib/oracle/12.2/client64 pecl install oci8-2.0.12.tgz

 

上記2つ目のコマンドを入力した際に、途中で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] :と入力を求められますが、ここでは自動検知で良いため、そのままEnterを押下しインストールを完了させます。

 

phpinfoからインストールの確認

上記でインストールできたかどうかをphpinfo()から確認します。

以下のPHPコードを配置し、ブラウザから確認してみます。

 

<?php
    phpinfo();
?>

 

fig1. oci8インストール確認

fig1. oci8インストール確認

 

PHPからOracle Databaseに接続

準備が整ったので、以下のPHPテストコードからDBに接続してみます。

使用するDBは前回作成したPDB1になります。

事前にインスタンスとリスナーも起動しておきます。

なお、phpコマンドからスクリプトとしてDBに接続する際は問題ありませんが、SElinuxが有効の場合、httpdにてブラウザからアクセスする際にディレクトリのパーミッション($ORACLE_HOMEが755)が正しく設定されていても、ORA-12546: TNS:permission deniedのエラーが出てしまうので、SELinuxは無効にしておいたほうが良いです。

 

# test_con.php
<!DOCTYPE html>
<html>
<head>
<style>
tr {
    text-align: center;
}
</style>
</head>
<body>
<?php
    $conn = oci_connect('ora01', 'oracle', 'localhost/pdb1');
    if (!$conn) {
        $e = oci_error();
        trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }
    $stid = oci_parse($conn, 'SELECT * FROM Test ORDER BY ID');
    oci_execute($stid);
    echo "<table border='1' width=300>";
    echo "<tr><th>ID</th><th>name</th></tr>";
    while (oci_fetch($stid)) {
        echo "<tr>";
        echo "<td>" . oci_result($stid, 'ID') . "</td>";
        echo "<td>" . oci_result($stid, 'NAME') . "</td>";
        echo "</tr>";
    }
    echo "</table>";
    oci_close($conn);
?>
</body>
</html>

 

fig2. DB接続確認

fig2. DB接続確認

 

無事接続できたことが確認できました。

 

最後に

今回はPHPからOCI8を使用してOracle Database 12c Release 2へ接続する方法について学びました。

次回からはperlからOracle Database 12c Release 2へ接続するための設定について学んでいきます。




以上の内容はhttps://engineeringnote.hateblo.jp/entry/database/oracle/oci8-installより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14