PHP -> PEAR -> サンプル

Smarty+PEARサンプルプログラム(MVCモデル)

環境準備

・php5
・Smarty
・PEAR
全てubuntuのパッケージマネージャーでインストールした。

ディレクトリ構成
/www
  xxxx.php
  /cache              ( $smarty->cache_dir )
  /configs            ( $smarty->config_dir )
    xxxx.php
  /templates          ( $smarty->template_dir )
    xxxx.tpl
  /templates_c        ( $smarty->compile_dir )

ソース

以下6つのファイルを使用する。
  1. index.php
  2. configs/config.php
  3. controller.php
  4. model.php
  5. view.php
  6. tmplates/list.tpl

index.php

<html>
<head>
  $lt;meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title></title>
</head>
<body>
  <div align='center'>
<?php
  include_once("./controller.php");
?>
  </div>
</body>
</html>

include_once と require_once の違い。
include_onceはエラーになっても動作を継続する。
require_onceはエラーになった時点で動作を停止する。
このページの場合、エラーになっても</div></body></html>は
表示させなければならないので include_once を使用する。

config.php

<?php
  define(DSN,"mysql://user:passwd@localhost/userdb");
?>

controller.php

<?php 
  require_once('./model.php');
  require_once('./view.php');

  $db = new model;
  $view = new view;

  $db->connect();
  $sql = "select * from user";
  $list =& $db->query($sql);

  $view->display($list,'list.tpl');
?>

model.php

<?php

require_once('/usr/share/php/PEAR/DB.php');
require_once('./configs/config.php');
 
class model
{
  /* constructor */
  var $dbh;

  function connect()
  {
    $this->dbh =& DB::connect(DSN);

    if (PEAR::isError($this->dbh)) {
      die($this->dbh->getMessage());
    }
  }

  function query($sql)
  {
    $results = array();
    $result =& $this->dbh->query($sql);

    if (PEAR::isError($result)){
      die($result->getMessage());
    }

    while($row = $result->fetchRow(DB_FETCHMODE_ASSOC)){
      $results[] = $row;
    }

    $result->free();
    $this->dbh->disconnect();
    return $results;
  }
}
?>

view.php

<?php 

require_once('/usr/share/php/smarty/Smarty.class.php');

class view
{
  /* constructor */
  var $smarty;

  function view()
  {
    $this->smarty = new smarty;
  }

  function display($list,$tmpl)
  {
    foreach($list as $row){
      for($i=0;count($row)>0;$i++){
        $this->smarty->append("colmn{$i}",array_shift($row));
      }
    }
    $this->smarty->display($tmpl);
  }
}
?>

list.tpl

<table border='1'>
  <tr>
    <td>ID</td>
    <td>User Name</td>
    <td>passwd</td>
  </tr>

  {section name="list" loop=$colmn0}
  <tr>
    <td>{$colmn0[list]}</td>
    <td>{$colmn1[list]}</td>
    <td>{$colmn2[list]}</td>
  </tr>
  {/section}
</table>
      Document-Folder          一覧
HP-UX
HULFT
JAVA
JP1
JavaScript
Linux
MAC
PHP
Perl
Python
Ruby
SOA
Solaris
Unix全般
Windows
XML
エクセル
スタイルシート
セキュリティー
データベース
ネットワーク
パソコン
ブラウザ
プログラム構文
仮想化
          RSS-Folder
ニュース
   アットマーク・アイティ(@IT)
   シンクイット(ThinkIT)
   インターネットコム
   インターネットウォッチ
   日経IT-Pro
   日経パソコン
   CNET Japan
   ZD-NetJapan
   MYCOM
   RBB-Today
ベンダー
   日本IBM
   日本HP
   サンマイクロシステムズ
   NEC
   富士通
   日立
ソフトウェア
   マイクロソフト
   トレンドマイクロ
   オラクル
   サイボウズ
   Mozilla
   野村総合研究所
   (その他ソフトウェア企業)
更新履歴 一覧
 07/08 PERF
プログラム構文
 07/07 PERF
プログラム構文
 06/25 オブジェクトプログラミング2
Perl>サンプル
 07/12 クローン作成
仮想化>vCenter
 07/12 vyatta設定
ネットワーク>vyatta
 07/12 vyattaインストール
ネットワーク>vyatta
 07/12 リポジトリサーバ
Linux>サーバ構築
 07/05 VMwareのインストール
仮想化>VMware
 07/05 PXEブート
仮想化>KVM
 07/01 DHCPでのPXEブート
仮想化>KVM
 06/27 qcow2仮想DISK作成
仮想化>KVM
 06/13 NWの設定
仮想化>VMwareEsxi
 06/13 IPアドレスの変更
仮想化>VMwareEsxi
 06/12 自動ssh
Unix全般>シェル>Bash
 06/12 diffプログラミング
Python
Google