【Webアプリ】開発環境をイチから作成・その7(Apache + PHP + Oracle連携)

Web開発環境構築のアイキャッチ画像

この記事の中でやる事

前回は eclipse 上のワークフォルダに新しく php プロジェクトを作成して、 Apache から表示するところまで行いました。

今回はこれにデータベースを加え、 Apache + php + Oracle で連携するところまでの設定を記載します。

OracleにWebアプリ用のスキーマを新規作成

PHPアプリケーション側から接続してデータを格納・参照するための Oracle のスキーマを新しく作成します。

SQL*Plus で Oracle への接続

Oracle データベースをコマンドラインから操作するため、 SQL*PLus を起動します。

dev_setting_06_create_oracle_scheme01

SQL*Plus を起動した直後の画面

新しくスキーマを作成するため、システム管理者( sysdba )用のユーザで接続します。SQL*Plusを起動したあと、以下のコマンドでOracle に sysdba として接続できます。

connect / as sysdba

user_users オブジェクトを参照することで、ユーザの表領域、一時領域、アカウントロック状況等が確認できます。
Oracle DBに登録されているユーザの一覧を表示してみます。

select username from user_users;

記事を書いている人の環境では「SYS」とだけ表示されました。

テスト用アプリのための Oracle 表領域の作成

テスト用アプリの表領域を作成します。とりあえずファイルとして20MB分のデータ保存のための領域を確保してみます。

create tablespace testap_tblsp
	datafile 'C:\add\devs\eclipse_cc\workspace\db\testap.dbf'
	size 20m
	autoextend on;

上を入力した結果、「表領域が作成されました。」と出力されれば作成完了です。
一応確認のため、以下のコマンドを入力してOracle に設定した表領域を表示してみます。

select tablespace_name,status,contents from dba_tablespaces;

一覧出力されたtablespaceフィールドが 「testap_tblsp」 のものが追加されており、
STATUSフィールドが「ONLINE」であれば使用可能な状態となっています。

テスト用アプリが更新・参照するための権限(ROLE)作成

次に新規にユーザ「testap」および権限(ROLE)を作成します。
まずはテスト用アプリへの更新・参照権限をもつ権限(ROLE)の「testaprole」を作成します。

 -- アプリ用のROLEを作成
CREATE ROLE testaprole;
 -- 一般ユーザ用のシステム権限(CONNECTロール)を testaproleに付与
GRANT CONNECT TO testaprole;
 -- 開発者のシステム権限(RESOURCEロール)を testaproleに付与
GRANT RESOURCE TO testaprole;

次に、ユーザを作成します。パスワードは仮に「testpw」です。

CREATE USER testap IDENTIFIED BY testpw
	DEFAULT TABLESPACE testap_tblsp
	TEMPORARY TABLESPACE temp
	QUOTA UNLIMITED ON testap_tblsp;

実行結果に「ユーザーが作成されました。」がでればユーザ作成成功です。

権限「testaprole」をtestapユーザに付与します。

GRANT testaprole TO testap;

テストアプリ用のテーブルとデータの作成

新規に作成したユーザ「testap」でログインし直します。
一度、「quit」コマンドでSQL*Plusから抜け出し、再度 SQL*Plus を立ち上げ、ログインします。

conn testap/testpw

テスト用のテーブル「T4CHARACTERS」を作成します。

CREATE TABLE 	T4CHARACTERS
(	id	NUMBER(8,0)
,	name	VARCHAR2(255) NOT NULL
,	lv	NUMBER(3,0)   NOT NULL
,	exp	NUMBER(8,0)   NOT NULL
,	hp	NUMBER(8,0)   NOT NULL
,	mp	NUMBER(8,0)   NOT NULL
,	updated	DATE	DEFAULT NULL
,	created	DATE	DEFAULT NULL
)	TABLESPACE	TESTAP_TBLSP
;
ALTER TABLE T4CHARACTERS ADD PRIMARY KEY ( id )
 USING INDEX TABLESPACE TESTAP_TBLSP;

次にレコードを追加しておきます。

insert into T4CHARACTERS VALUES(1,'少年K',1,0,20,5,SYSDATE,SYSDATE);
insert into T4CHARACTERS VALUES(2,'少年G',1,0,15,0,SYSDATE,SYSDATE);
insert into T4CHARACTERS VALUES(3,'敵1',1,3,8,0,SYSDATE,SYSDATE);
commit;

以上でデータベース自体の作成は完了です。

PHPからOracleに接続するための設定をする

次に PHP から Oracle への接続をしてみたいと思います。
PHP から Oracle へ接続するには oci_connect 等の関数を使用できるように設定が必要です。

そのためには php.ini の拡張モジュールに Oracle の 11g 用のライブラリを指定して、Oracle接続に必要な関数等を使用できるようにする必要があります。
設定ファイル(php.ini)は xammp インストールパス内の php フォルダ直下にあります。
以下の php_oci8_11g.dll のコメントを外します。
(Oracle10gを使ってる人は、php_oci8.dllのコメントを外すとよいです)

;extension=php_oci8.dll      ; Use with Oracle 10gR2 Instant Client
;extension=php_oci8_11g.dll  ; Use with Oracle 11gR2 Instant Client

php の文字コード設定を行う

オマケですが php 全体の標準文字コードを設定します。
ここに設定した値が HTTP ヘッダのContent-typeに出力されます。これを設定することで、HTMLに文字を出力したときの文字化け防止になります。
以降、php を出力するファイルは UTF-8の文字コードで保存するよう統一します。

default_charset = "UTF-8"

また、日本語などの多くの文字種類を持っている言語向けに、マルチバイト文字列を取り扱いできるようにするための「mbstring」用の日本語文字コード用の設定を行っておきます。

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.http_output = UTF-8

Oracle の文字コードを設定

Oracle からの出力文字コードの設定を行います。
こちらもPHPとあわせて「UTF8」形式で統一しようと思います。
dev_setting_06_add_oracle_env2
新しい環境変数の「NLS_LANG」を追加します。
変数内容は「Japanese_Japan.AL32UTF8」にします。

実際にPHPからOracleへ接続してみる

一通り設定できたので PHP 上から OracleDB のデータ内容を読み出します。
今回、php ⇔ oracle 接続には oci_connect関数を使用します。
oci_connect関数:https://php.net/manual/ja/function.oci-connect.php (公式)

以下の oracle_test.php を eclipse から新規追加します。

<html><head><meta charset="UTF-8">
<title>Oracle 11g 接続テスト</title>
</head><body>
<h1>Oracle 11g 接続テスト</h1>
Oracle との接続テストです。<br />
以下、Oracle連携で取得したデータ。<br /><br />
<?php
$oraid = 'testap';
$orapw = 'testpw';
$oraConnString = 'localhost/XE';
$oraLang = 'AL32UTF8';
$oraConn = oci_connect($oraid, $orapw, $oraConnString, $oraLang);
if (!$oraConn) {
 $e = oci_error();
 trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$sqlString = 'SELECT * FROM T4CHARACTERS';
$statementId = oci_parse($oraConn, $sqlString);
oci_execute($statementId);
echo "<table border='1'>\n";
echo "<caption>表. キャラクタテーブル(T4CHARACTER)</caption>\n";
echo "<tr><th>番号</th><th>名前</th><th>Lv</th><th>Exp</th>";
echo "<th>HP</th><th>MP</th><th>更新日</th><th>作成日</th></tr>\n";
while ($row = oci_fetch_array($statementId, OCI_ASSOC+OCI_RETURN_NULLS)) {
 echo "<tr>\n";
 foreach ($row as $item) {
 echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&amp;nbsp;") . "</td>\n";
 }
 echo "</tr>\n";
}
echo "</table>\n";
?>
</body></html>

追加&保存してブラウザからアクセスしたところ、無事にデータを参照できました。
dev_setting_06_result_oracle_data

今回はここまで。

非常に参考になったサイトさま

Webアプリの開発環境をイチから作成シリーズ記事

  1. その1(Eclipse&Java SDK7 導入)
  2. その2(Eclipse の Plugin 導入)
  3. その3(Oracle DB 11g XE R2 インストール)
  4. その4(Oracle DB 11g XE R2 疎通確認)
  5. その5(XAMPP インストール)
  6. その6(Apache + PHP + Eclipse連携)
  7. その7(Apache + PHP + Oracle連携) ←いまココ
  8. その8(CakePHP + Oracle連携)
  9. その9(CakePHP + Oracle連携)

ページの更新履歴

更新日更新内容
2013.10.11ページ公開
2018.3.17スマホからレイアウトが崩れて読みにくいので修正。ついでに文章構造と内容も訂正。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする