PHP講習会私的メモ(第2回・第3回)

通っているPHP講習会の私的メモ。
繰り返しますが、小生の知識レベルはASP(.NETでない)は基本レベル、Perlをかじった程度です。
●smartyとは
smartyは高機能なテンプレートエンジンでphp開発のデファクトスタンダードになっている。
小生は初めてテンプレートエンジンに触れます。
[手順]
1.smartyをダウンロード
2.解凍してlibsフォルダをpublic_htmlと同階層にアップ
3.public_html下にtemplates、templates_cディレクトリ作成(※)
4.templates_cに書き込み権限(777)
5.おしまい
※この位置はセキュリティの都合上public_htmlと同列に変更した方が良い(後述)。
public_html/smarty.php
public_html/templates/templates.html
public_html/templates_c/****

smarty.phpにアクセスするとtemplates.htmlを解析して、templates_cにコンパイルファイルが生成される。
→タイムスタンプを見て一度だけコンパイルするので高速
●smartyの使い方
public_html/smarty.php
<?php
$scalar="hello Smarty!";
$array=array("m"=>"男","f"=>"女");
$age=20;
require("../libs/Smarty.class.php");//smartyを読み込み
$smarty = new Smarty();//smartyインスタンス生成
$smarty->assign("word",$scalar);//assignメソッドで変数割り当て
$smarty->assign("sex",$array);
$smarty->assign("age",$age);//
$smarty->display("templates.html");//displayメソッドでテンプレート呼び出し
?>

public_html/templates/templates.html
{*コメント。ブラウザに出力されない*}
{$word|escape}<br>{*パイプ+escape修正子で出力文字のサニタイジング*}
{$sex.m}<br>{*配列は.で*}
{$sex.f}<br>
{if $age==20}{*テンプレート内でif文もできるよ*}
20歳です。
{elseif $age==30}
30歳です。
{else}
その他
{/if}

assignの扱いが混乱しそう。php側とテンプレート側で変数名はそろえた方が良い?
escape修正子は出力文字列のサニタイジング。
php側で対策する場合はhtmlspecialchars($str,ENT_QUOTES)
(両方やっちゃうとだめ)
こっから第3回内容。
●templatesディレクトリの移動
public_html内にtemplates、templates_cディレクトリがあるのはまずい。
→ソースコードの漏洩
→public_html外に保存してhttpアクセスをさせない
libs内にMySmarty.class.phpを作成
MySmarty.class.php
<?php
define("ROOT_DIR","/home/umakoya");
include_once(ROOT_DIR."/libs/Smarty.class.php");
class MySmarty extends Smarty{
function MySmarty(){
$this->template_dir = ROOT_DIR."/templates";
$this->compile_dir = ROOT_DIR."/templates_c";
$this->Smarty();
}
}
?>

ディレクトリの指定先を変更する。
php内では下記で呼び出し。
require("../libs/MySmarty.class.php");//MySmartyを読み込み
$smarty = new MySmarty();//Mysmartyインスタンス生成

●debug機能
{debug}をテンプレート内にいれるとassignされた値を表示する。
●smarty雑感
・テンプレートエンジンを初めて使った
・デザインとプログラムの分離
・業務フロー的にどうだろう?(静的htmlとphpが混在するサイトの場合)
●SQLite
・php5から標準で利用可能
・検索速度が早く、商用DBと遜色ない
・DBはファイル形式(書込権限に注意)
・データ型なし
・大文字、小文字区別なし
今回はsshPutty日本語化)でSQLiteを操作し、SQL文の練習をした。
$ sqlite member_db
sqlite>CREATE TABLE member_m (member_no,member_name,password);
sqlite>INSERT INTO member_m (member_no,member_name,password) VALUES(1,'umakoya','pass');
sqlite>SELECT * FROM member_m;
sqlite>UPDATE member_m SET member_name='UMAKOYA' WHERE member_no='1';
sqlite>DELETE FROM member_m WHERE member_no='1';
sqlite>.help
sqlite>.exit

●SELECT文の練習そのほか
ORDER BY *** (DESC) LIMIT 上限数 OFFSET 下限数
a LIKE 'uma%'
a LIKE 'uma_'
a IS NULL
a IN ('a','b','c')

SQLite ControlCenter 日本語版ではGUIでDBの操作が可能です。
この日は他の受講者とも少し会話しました。
友人と(?)起業された方で、急遽PHPを勉強しているんだとか。
他のスクールにも通っているが、ここは格安で実践的で講師も現場の人だから非常に良いとのことでした。
そんな小生が通っている講習会はこちら。
アシアル株式会社 事業紹介 PHPスクール
講師がイケメンだよ!
次回からブログシステムの制作になります。

スポンサーリンク
広告
広告

シェアする

フォローする

コメント

  1. Saity より:

    イケメンとは恐縮です(^^;

  2. 馬小屋 より:

    あ!先生自ら恐れ入ります。
    次回講習会がありましたらぜひ参加させて頂きます。
    (まだ前回の復習が済んでいません・・・)