MIRACLE

メールサービス申込 ユーザー登録&ログイン パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

テクノロジー情報

技術フォーラム


MIRACLE LINUX で Web アプリケーション(PHP、Oracle)

2003年3月5日

PHP を利用して Oracle データベースからデータを読み取り Web へ表示するまでを説明しています。なお、Oracle の基本的な操作および簡単な PHP スクリプトの作成についての説明はここでは省略しています。



  1. 準備

     ここでは MIRACLE LINUX Standard Edition V2.1 をインストールしたサーバーを想定しています。
    インストールタイプについては「Apache 利用オラクルサーバ」を考えていますが、カスタムインストールされたサーバーでも同様に設定することができます。
    目標は PHP を使い Oracle データベースからデータを読み取り Web へ表示することです。

    なお、Oracleの基本的な操作及び簡単なPHPスクリプトの作成についてはできるものとして話を進めます。

    Oracle のインストール

    Oracle をインストールしてください。Oracle のインストール方法につきましてはここでは説明しません。詳しくはマニュアル等を参照してください。

    環境変数の設定

    Web から Oracle へアクセスする為には、Apache の環境変数を設定する必要があります。
    Install Navigator for Oracle を使用してインストールした場合には /etc/httpd/conf/httpd.bootopt へ設定されますので確認してください。

    Oracle を /opt/oracle へインストールした場合の /etc/httpd/conf/httpd.bootopt 設定例

    # if you are using SSL please comment out next line
    #HTTPDOPT=-DSSL
    
    # made by oranavi
    export ORACLE_BASE=/opt/oracle
    export ORACLE_HOME=/opt/oracle/product/9.0.1
    export ORACLE_SID=orcl
    export NLS_LANG=American_America.JA16EUC
    export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
    export PATH=$PATH:$ORACLE_HOME/bin
    export ORACLE_DOC=$ORACLE_HOME/doc
    CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
    CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
    CLASSPATH=$CLASSPATH:$ORACLE_HOME/jdbc/lib/classes12.zip
    CLASSPATH=$CLASSPATH:$ORACLE_HOME/jdbc/lib/nls_charset12.zip
    export CLASSPATH
    if [ ! $LD_LIBRARY_PATH ]; then
        LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib:$ORACLE_HOME/jdbc/lib
        export LD_LIBRARY_PATH
    fi
    

    ORACLE_HOME や ORACLE_SID については環境に合わせて適切な値へ変更してください。

    テーブル

    テーブルを作成します。今回は scott/tiger で作成されている EMP 表を使います。次のようにして EMP 表がインストールされていることを確認してください。

    # su - oracle
    $ sqlplus scott/tiger
    SQL> desc emp
     名前                                      NULL?    型
     ----------------------------------------- -------- ----------------------------
     EMPNO                                     NOT NULL NUMBER(4)
     ENAME                                              VARCHAR2(10)
     JOB                                                VARCHAR2(9)
     MGR                                                NUMBER(4)
     HIREDATE                                           DATE
     SAL                                                NUMBER(7,2)
     COMM                                               NUMBER(7,2)
     DEPTNO                                             NUMBER(2)
    

    以上で準備は完了です。



  2. PHP スクリプト

    EMP テーブルを表示する

    ここではデータベースのテーブルにあるデータを表形式で Web に表示します。以下のような OCI 関数を使い Oracle へアクセスします。基本的な手順は以下のようになります

    1. データベース接続
       例)OCILogon("scott","tiger")
    2. SQL文解析
       例)OCIParse($conn,"SELECT * FROM EMP")
    3. SQL文実行
       例)OCIExecute($stmt)
    4. SQL結果表示
      例)OCIFetch($stmt) OCIResult($stmt,1)

    以下はデータベースからEMP表を読みこんでテーブル表示するサンプルスクリプトです。

    oci_sample.php(一部抜粋)

    // データベースと接続する
    $conn = OCILogon("scott","tiger");
    if($conn == false) {
    	echo("Can't DB Connect");
    	exit;
    }
    // SQL文
    $sql = "select * from emp";
    // SQL実行
    $stmt = OCIParse($conn,$sql);
    $result = OCIExecute($stmt);
    if($result == false) {
        echo("Can't exec SQL: [$sql]");
        exit;
    }
    // 列数を取得
    $ncols = OCINumCols($stmt);
    // データを表示する
    while( OCIFetch($stmt) ) {
        for ($c = 1; $c <= $ncols; $c++ ) {
            $str = OCIResult($stmt,$c);
            echo("$str");
        }
    }
    // 後処理
    OCIFreeStatement($stmt);
    OCILogoff($conn);
    

    ■サンプルスクリプト oci_sample.php

    PHP 関数の詳しい説明はオンラインマニュアルを参照してください。



  3. PHP スクリプト応用編

     PHP スクリプトでは関数を書くことや、オブジェクト指向で記述することも可能です。例えば、クラスを使うことで機能拡張がしやすくなりますので、ぜひオブジェクト指向を使いましょう。

    ここでは簡単な Oracle 接続用クラスとその使い方の例をあげます。

    クラス:Sample

    以下の Sample クラスは Oracle データベースの EMP 表へアクセスするクラスです。

    class Sample
    {
        var $conn;				// データベースのコネクション
        var $rows;				// 検索結果格納用配列
    	
        function Sample($user, $passwd)	// connect Oracle DB
        {
            if($this->conn = OCILogon($user, $passwd)) {
                return(TRUE);
            } else {
                return(FALSE);
            }
        }
    
        function logoff()		// disconnect Oracle DB
        {
            OCILogoff($this->conn);
        }
    
        function selectExec($sql)	// select文実行
        {
            $this->rows = array();
            $arr = array();
            $stmt = OCIParse($conn, $sql);
            if(OCIExecute($stmt, OCI_DEFAULT) ) {
                while(OCIFetchInto($stmt, &$arr, OCI_ASSOC)) {
                    $this->rows[] = $arr;
                }
                OCIFreeStatement($stmt);
                return(TRUE);
            } else {
                return(FALSE);
            }
        }
    }
    

    上記クラスを使うには以下の手順でインスタンスを作成します。

    1. インスタンスを作成する。
      例)scott/tiger でデータベースに接続するには
      $emp = new Sample("scott", "tiger")
      となります。
    2. EMP 表を読み出す。
      $emp->getEmp()
      メソッドの例については以下のサンプル:getEmp メソッドを参照してください

    サンプル:getEmp メソッド

    SQL 文(select * from emp) を実行するメソッドです。

        function getEmp()	// EMP 表を取り出す
        {
            $sql = "select * from emp";
            return($this->selectExec($sql));
        }
    

    関数:viewTable

    上記クラスで取り出した配列 rows は2次元の連想配列になっています。このままでは表示できませんので、TABLE として表示する関数を作ってみましょう。PHP では以下のように配列を簡単に扱うことが可能です。

    function viewTable($arr)
    {
        echo "<table border=1>\n";
        while(list($c, $row) = each($arr)) {
            echo "<tr>\n";
            while(list($col, $value) = each($row)) {
                echo "<td>$value</td>\n";
            }
            echo "</tr>\n";
        }
        echo "</table>\n";
    }
    

    このようにデータベースアクセス部分と HTML 表示部分を分けることにより、変更により強く、より簡単に拡張することが可能になります。
    例えば HTML 表示部分をカスタマイズしたり、また DEPT 表を表示するメソッドを追加することが可能です。

    ■上記クラスのサンプル sample_class.php

■この資料の評価をお願いします。
とても参考になった
参考になった
どちらでもない
あまり参考にならなかった
まったく参考にならなかった

コメントがある場合は以下に記述してください。技術資料として取り上げてほしいテーマも受け付けています。

以下は任意です。

お名前(フルネーム) :
会社名 :
メールアドレス :
 

ページトップへ



テクノロジー情報
リナックス関連
イベント/セミナー資料
オラクル/DB関連
Samba関連
研修のご紹介
FAQ
インストレーションガイド
ソフトウェアダウンロード
実績のあるシステム構成

会社情報 採用情報 個人情報保護方針 情報セキュリティ基本方針 商標等取り扱い事項 English
Copyright(c)2000-2015 MIRACLE LINUX CORPORATION. All Rights Reserved.