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スクール
講師がイケメンだよ!
次回からブログシステムの制作になります。

PHP講習会私的メモ(第1回)


先日のPHP講習会の私的メモ。
なお小生の知識レベルはASP(.NETでない)は基本レベル、Perlをかじった程度です。
●基本
<?php
$hensu="Hello";
print("$hensu Word!");
$array = Array("a","b","c");
?>

変数は$“”は変数展開。文末は;。perlと一緒だ。
配列も$だから注意。連想配列もあるよ。
<?phpの書き出しに慣れない。ASPは<%でタイプ数も少ない。
あとperlのuse strict;みたいなのはないのかな?まだ習ってない。
●関数
http://www.php.net/関数で検索。
例:http://www.php.net/print
やー!これは便利。
●フォーム入力
$_POST/$_GETにformのnameをキーにして連想配列。
これはすごい!(タイプが面倒っぽいけど)
$value=$_POST["name"];
ASPのようにRequestで取得しなくて良いんだ。
●ループ制御
foreach ($_POST as $key=>$value){
print("$key is $value");
}

$valueだけ欲しい場合はas $key=>を省略可。
●セッション
session_start();//セッションスタート
$_SESSION["name"]="umakoya";//セッション代入

この辺はASPと一緒。
●セッション固定攻撃
phpは設定によってはGETでセッションを引き回せる(cookieに対応していないブラウザ向けに便利)。
hoge.php?PHPSESSID=xxxxxx
でもこれだとセッションIDを指定した偽URLをクリックさせ、セッションを乗っ取ることができる!!

http://hoge.co.jp/login.php?PHPSESSID=danger

これってかなり危なくね?
対策としてはアクセス直後にセッションIDを変更する関数を使用して乗っ取りを防ぐ。
session_start()
session_regenerate_id(true)//セッションIDを変更
//以下処理

今回は第1回ということもあり、ついていくことができました。
間違いなどお気づきの点はご指摘いただければと思います。

  • 他のブログ

    育児で買ったモノたち
  • Twitter

  • 最近の投稿

  • 最近のコメント

  • はてなブックマーク

  • RSS購読

    RSS Feed RSS - 投稿

  • カテゴリー

  • 月別

  • カレンダー

    2017年4月
    « 3月    
     12
    3456789
    10111213141516
    17181920212223
    24252627282930
  • プロフィール


    健康・医療系の出版社でウェブに関わる営業企画と浅い技術。Webディレクター?
  • キーワード検索