Ta-kaku.jp Tools
Update 2010/02/06
技術メモ内容
トップページ
ハードやソフトの技術メモです。 ほとんど、個人の備忘録のレベルですので高度なことは書かれていません。 皆様に少しでもお役に立てれば幸いです。
MENU
5.PHP
サイト更新情報
2008/10/18
「Ta-kaku Tools 住所検索・郵便番号検索・事業所名検索・駅検索・電話局番検索」を Ver2.202 にリビジョンアップしました。
更新内容は以下の通りです。
・「xxx1丁目」の様に「全角の数字」と「丁目」が続いている文字列が入力されると検索できない事がある不具合を改修しました。
2008/10/01
Ta-kaku Tools Whois検索 Ver1.000をリリースしました。
2008/09/30
「Ta-kaku Tools 住所検索・郵便番号検索・駅検索・電話番号(局番)検索 」を Ver2.201 にリビジョンアップしました。
更新内容は以下の通りです。
・電話番号(局番)検索機能を正式版にしました。 ・無効な数値に対して住所の検索を行っていた処理を改善しました。 ・局番0120指定でGoogleMapがおかしな場所を示していた不具合を修正しました。 ・「東京駅駅」のように入力されると、関係の無いデータが出力される不具合を修正しました。
過去の情報
関連キーワード
技術メモ インデックス
カテゴリーを選択してください。
インストール
プログラミング言語
マークアップ言語
データベース言語
スクリプト言語
MS-Office
その他
Webアプリケーション
の開発方法
5.PHP 技術メモ
追加日時の新しい方から掲載しています。
第5章 PHPについて
登録日:2006/10/10   分類:Webシステム
目的
    PHPは、HTMLに容易に埋め込むことができるスクリプト言語です。
    近年、急速にWeb言語としてのシェアを確立してきました。
    その理由の一つに、PHPの機能を充実させる標準モジュール群があります。
    ここでは、これらPHPの標準モジュールの活用方法を中心に解説したいと思います。

目次
    1.PHPとは
    2.PEARとは
    3.Smartyとは
    4.DB操作

1.PHPとは
    PHPは、「ピーエイチピー」と呼びます。
    この言語は、CやPerlを参考にして考案された比較的新しいコンピュータ言語です。
    C系の言語を習得されている方は、容易にPHPを習得することができます。

    PHPは、動的なWebページを作成する事ができます。
    例えば、検索した結果をWebページに表示することなどが可能となります。

    PHPの特徴は、インタープリタ言語である事です。
    インタープリタ言語は、通常動作が緩慢になりがちですが、PHPはCGIよりも高速に
    動作します。
    これは、WebサーバであるApacheモジュールの一部として動作する仕様になっている
    からです。
    実行プロセスも、Apacheと共有されますのでCGIのように無駄なリソースを消費する
    事もなく効率的にアプリケーションを動作させる事ができます。

    PHPは、無料のスクリプト言語ということもあり、急速にシェアを広げてきました。
    多くの人々がPHPに拘わってきていることから、よく使う機能を共通モジュールとし
    て無料で提供してゆこうという活動も行なわれています。
    以下に示す、PEARやSmartyは共通モジュールの一部です。
    PHPでは、これらの共通モジュールを使用する(Classを使用する)ことで安定した高度
    なアプリケーションを構築する事ができます。

    PHPの品質は、PHP専門の品質保証機関(PHP-QAI:PHP Quality Assurance Initiative)
    によって管理されています。

    PHPのプログラミング方法については、充実したサポートサイトが存在していますので、
    そちらをご参照ください。

        PHP マニュアル
        http://jp2.php.net/manual/ja/index.php

2.PEARとは

    PEARは、「ペア」と呼びます。
    これは、PHPで作成された共通ライブラリーです。
    PHPインストール時に、デフォルトで追加インストールされるほどメジャーな
    クラスライブラリー群を含んでいます。

    PHP-QAIが認めた理由は、標準スタイルに準拠した非常に優秀な構造化ライブラリ群
    にあります。

    2-1.PEARの機能紹介

        PEARには、非常に多くの共通モジュールが含まれています。
        その中から、ぜひご紹介したい機能を以下に示します。
        実際のコーディング方法は、第7章で紹介します。

        (1) HTML_QuickForm

            簡単にI/Fオブジェクトを設置できるようにしたライブラリです。
            主に、入力値チェックなどを行う際に重宝します。

            http://pear.php.net/package/HTML_QuickForm

        (2) Auth_HTTP

            通常、.htpasswd などのファイルで行うBASIC認証を簡単に実装することが
            できます。
            また、ユーザとパスワードの管理をデータベースで行うことができます。

            http://pear.php.net/package/Auth_HTTP

        (3) Spreadsheet_Excel_Writer

            COMオブジェクト無しに、Excelファイルを作成することができます。

            http://pear.php.net/package/Spreadsheet_Excel_Writer

    2-2.PEARのコーディング規約

        PEARの推奨するコーディング規約は、細部に及んでいますが、
        論理的なミスを減らす為にも、ぜひご一読することをお勧め致します。

            PEAR マニュアル 標準コーディング規約
            http://pear.php.net/manual/ja/standards.php

3.Smartyとは

    Smartyは、「スマーティー」と呼びます。
    これは、PHP言語のためのテンプレートエンジンです。
    テンプレートとは、データや文章を配置する位置などを記述するものです。

    Smartyには、Smarty独自のコーディングスタイルがあります。
    いわゆるテンプレート言語を使用してコーディングします。
    Smartyの特徴は、テンプレートファイルを実行可能なPHPスクリプトにコンパイル
    する事です。
    このコンパイル作業は、テンプレートとコンパイル後のPHPスクリプトの
    タイムスタンプを比較して、テンプレートが新しい場合のみ再実行されるように
    なっています。

    その他の特徴として、ページのキャッシュ機能やテンプレートをDBに格納する
    テンプレートリソース機能などがあります。

    しかし、Smartyを導入する最大の目的は、Webアプリケーションにおける、
    「アプリケーション層」と「プレゼンテーション層」を分離することにあります。
    アプリケーション層は、SQLなどを使用してデータを検索したり更新したりする
    役割を持つレイヤーです。
    こちらは、主にプログラマーが作成する事になります。
    一方、プレゼンテーション層は、データの配置を決定するレイヤーです。
    こちらは、デザイナーが作成する事になります。
    このように、アプリケーション層とプレゼンテーション層を分離することで、
    お互いの作業に影響を与えないようにする事ができます。

    Smartyテンプレート言語の記述方法については、以下のサイトをご参照ください。

        コンパイリング PHP テンプレートエンジン
        http://sunset.freespace.jp/smarty/SmartyManual_2-6-6J_html/

    3-1.Smartyの実装方法

        Smartyは、直接Smartyクラスからインスタンスを生成する事はしません。
        一旦、派生クラスを定義して、コンストラクタの中でプロパティにサイトの
        ディレクトリ情報などを設定するようにします。

        --- sample5_1.php --->
        <?php
        // Smartyクラスをインクルード
        require('Smarty/Smarty.class.php');

        // 自サイト用の派生クラスを定義
        class SampleSmarty extends Smarty
        {
            // コンストラクタ
            function SampleSmarty()
            {
                // Smartyの実装
                $this->Smarty();
                $mydir = dirname(__FILE__);

                // テンプレートファイルを置くディレクトリ
                $this->template_dir = "$mydir/templates/";

                // コンパイルされたテンプレートが置かれるディレクトリ
                $this->compile_dir = "$mydir/templates_c/";

                // テンプレート用の設定ファイルを置くディレクトリ
                $this->config_dir = "$mydir/configs/";

                // テンプレートのキャッシュが格納されるディレクトリ
                $this->cache_dir = "$mydir/cache/";

                // テンプレート出力のキャッシングの指定(0 ... キャッシング無し)
                $this->caching = 0;
            }
        }
        ?>
        <--- sample5_1.php ---

        以下は、Smartyの派生クラスからインヘリタンスを生成した後、
        テンプレートに値を引き渡すコードです。

        --- sample5_2.php --->
        <?php
        require_once('MySmarty.class.php');

        // インヘリタンスを生成
        $objSmarty =& new SampleSmarty;

        // テンプレート変数(test)に値をセット
        $objSmarty->assign('test', 'Smartyで文字を出力');

        // sample5_3.htmlを表示
        $objSmarty->display('sample5_3.html');
        ?>
        <--- sample5_2.php ---

        テンプレートは、以下のように記述します。
        { } で囲まれた部分がSmartyテンプレート言語の部分です。
        その他は、通常目にするHTMLのコードになります。

        --- sample5_3.html --->
        <html>
            <head>
                <title>Smartyで文字を出力</title>
            </head>
            <body>
                {$test}    <!-- ここで文字を出力します -->
            </body>
        </html>
        <--- sample5_3.html ---

    3-2.Smartyのプラグイン

        Smartyの特徴の一つに、プラグインを容易に追加できる事があります。
        ここで言うプラグインとは、テンプレートの機能として容易する事で、
        後々有効に共有できる単体機能を指します。
        例えば、都道府県のセレクトボックスなどがこれに当たります。

        プラグインには、プログラマ用,デザイナ用,フィルタ系が標準として
        実装されています。
        その他、都道府県のセレクトボックスなどの関数系プラグインを追加
        することができます。

        プラグインとレイヤーとの関係は、以下のようなイメージになっています。

        ( ) ... プラグイン

        [プレゼンテーション]            [アプリケーション]  [データベース層]
                |                               |                   |
                |<---(プリフィルタ)             |                   |
                |                               |                   |
         <コンパイル処理><---(コンパイラ関数)   |                   |
                |                               |                   |
                |<---(ポストフィルタ)           |                   |
                |                               |                   |
        [コンパイル済み                         |                   |
        プレゼンテーション]                     |                   |
                |                               |                   |
                +-------------------------------+-------------------+
                                                |
                    (テンプレート関数, ----><実行処理> <-------[データベース]
                    ブロック関数)               |
                                                |<---(出力フィルタ)
                                                |
                                                v
                                             [HTML]

4.DB操作

    PHPにおけるDB操作は、PEAR::DB やADOで行います。
    ここでは、使い方が容易で、PEAR::DBよりも実行速度の速いADOを紹介したいと
    思います。

    4-1.実装からDB接続まで

        --- sample5_4.php --->
        <?php

        // ADOdbライブラリの読み込み
        require 'adodb/adodb.inc.php';

        //DBアカウント情報の設定
        $sqltype = "mysql";                     // データベースの種類を指定
        $server = "sampleserver";               // データベースサーバ名を指定
        $user = "sampleuser";                   // データベースユーザIDを指定
        $password = "samplepassword";           // データベースパスワードを指定
        $dbname = "sampledb";                   // データベース名を指定

        // ADOdbのインスタンスを作成
        $DB = NewADOConnection($sqltype);

        //DBに接続
        $DB->pconnect($server, $user, $password, $dbname);

        //接続チェック
        if (!$DB)
        {
            exit("接続に失敗しました");
        }

        ?>
        <--- sample5_4.php ---

    4-2.SQLの実行

        --- sample5_5.php --->
        // SQLの実行
        $result = $DB->execute("select * from T_SAMPLE");

        // 内容の表示
        echo $result->RecordCount();            // 件数の出力
        while (!$result->EOF)
        {
            print_r($result->fields);           // 内容の出力
            $result->moveNext();
        }
        <--- sample5_5.php ---

参考

    PHP マニュアル
    http://jp2.php.net/manual/ja/index.php

    PEAR マニュアル
    http://pear.php.net/manual/ja/

    コンパイリング PHP テンプレートエンジン
    http://sunset.freespace.jp/smarty/SmartyManual_2-6-6J_html/

---

・本ページの内容は、Ta-kakuが住所検索のページを作成する際に独自で調査した内容を
  講座的にまとめたものです。

・記述に誤りがある場合は、訂正して読み替えてください。

・技術的な内容にはお答えできませんので、予めご了承ください。

                    
PR