※本記事は、Sergio Leunissenによる”Connect PHP 7 to Oracle Database using packages from Oracle Linux Yum Server“を翻訳したものです。
注:この記事は更新されています。現在この記事には、PHPの最新リリースと、19cより導入されているOracle Instant Clientの簡易的なインストール・ガイドが含まれています。
当社は先般、Oracle Linux YumサーバーのリポジトリにPHP 7.4を追加しました。これらのリポジトリには、PHPアプリケーションをOracleデータベースと接続するためのPHP OCI8拡張も含まれています。
この記事では、PHP 7.4、PHP OCI8、およびOracle Linux上のOracle Instant Clientをインストールして、PHPとOracleデータベースを接続するための方法について説明いたします。なおこの記事では、Oracle Cloud Free Tierに含まれる無料のAutonomous Databaseを使用しています。
Oracle Instant Clientのインストール
Oracle Instant Client RPMはOracle Linux Yumサーバーでも利用可能です。これを利用するには、以下のとおり、まずoracle-release-el7パッケージをインストールして、適切なリポジトリをセットアップする必要があります。
$ sudo yum -y install oracle-release-el7 $ sudo yum -y install oracle-instantclient19.5-basic
SQL*Plus(健全性チェックに便利な場合があります)を使用できるようにしたい場合は、以下のとおりSQL*Plus RPMもインストールします。
$ sudo yum -y install oracle-instantclient19.5-sqlplus
スキーマの作成とHRサンプル・オブジェクトのインストール(任意)
すでにデータベースに存在している任意のスキーマを使用することもできます。ここでは、github.comにあるOracle Databaseのサンプル・スキーマからHRスキーマを使用します。すでにスキーマとそれに対応するデータベース・オブジェクトがある場合は、このステップを省略してください。
$ yum -y install git $ git clone https://github.com/oracle/db-sample-schemas.git $ cd db-sample-schemas/human_resources
SYSTEM(Autonomous Databaseを使用している場合はADMIN)として、ユーザー「PHPTEST」を作成します。
SQL> grant connect, resource, create view to phptest identified by <YOUR DATABASE PASSWORD>;
SQL> alter user PHPTEST quota 5m on USERS;
このサンプルのようにAutonomous Databaseを使用している場合は、上の表領域をDATAに変更します。
SQL> alter user phptest quota 5m on DATA;
ユーザー「PHPTEST」としてスクリプト「hr_cre.sql」と「hr_popul.sql」を実行し、HRデータベース・オブジェクトの作成と移入を行います。
SQL> connect phptest/<YOUR DATABASE PASSWORD>@<YOUR CONNECT STRING> SQL> @hr_cre.sql SQL> @hr_popul.sql
PHPおよびPHP OCI8のインストール
PHP 7.4をインストールするには、まず最新のoracle-php-release-el7パッケージがインストールされていることを確認する必要があります。
$ sudo yum install -y oracle-php-release-el7
次に、インストール済みのOracle Instant Clientに対応したPHPおよびPHP OCI8拡張をインストールします。
$ sudo yum -y install php php-oci8-19c
以下のPHPコード・スニペットを実行すると、PHPをデータベースに接続できること、およびデータを戻せることを確認できます。必要であれば、スキーマと接続文字列を置き換えるようにします。
<!--?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
$conn = oci_connect('phptest', '<YOUR DATABASE PASSWORD>', '<YOUR CONNECT STRING>');
$stid = oci_parse($conn, 'SELECT last_name FROM employees');
oci_execute($stid);
echo "\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
foreach ($row as $item) {
echo $item ."\n";
}
}
?-->
上のコードに基づいてファイル「emp.php」を作成します。
実行
$ php emp.php
これにより以下が生成されるはずです。
King Kochhar De Haan Hunold Ernst Austin Pataballa Lorentz Greenberg Faviet Chen Sciarra ...
