ウィルキンソンの炭酸が抜けていく。

webクリエイターのイロハ

フレームワーク研究

たとえばPHPフレームワークとは?

 

フレームワークは一言で表すと、アプリケーションの土台」と言えます

。データベースへの接続、認証機構の実装、データの登録・編集・削除ページの作成など、どんなWebアプリケーションにも必須の機能があります。これらの開発を毎回1から行うことは非常に効率が悪いことです。フレームワークはこれらの機能を一つにまとめ、その組み合わせ方も提供します。言わば、コードの規格書とも言えるでしょう。

フレームワークは、プレゼンテーション層とビジネスロジック層の分離、コントロールの標準化、標準的な処理(フォームの生成や値の取得など)の自動化など、Webアプリケーション構築に有用な機能を提供します。スキームが固まるため、セキュリティ対策にも効果があります。

フレームワークは、今後ますますPHP開発に不可欠なものになると考えられていますが、フレームワーク使用法のマスター方法、数多くあるフレームワークの中からどれを選択するかなどさまざまな問題があるのも事実です。

 

フレームワークは下記のようなシステム開発における問題に対して有用です。

  • 多くのプログラマが開発に関わり、各人のコードがバラバラになってしまう
  • コードの再利用性が低い
  • セキュリティ脆弱性などのセキュリティが不安
  • 開発のスピードが上がらない

つまり、フレームワークはアプリケーション開発の問題に対処するための下記のような特徴を持ちます。

  • 命名規則やディレクトリ構成などの規則が統一されており、大規模な開発に向いている
  • コードの再利用性が高いため、効率的な開発を行える
  • 開発に制約を設けることで、セキュリティ・保守性が高まる

大規模プロジェクトには多くの開発者が関与します。このようなケースでは開発者同士のスクリプトの差異の問題から、一定の品質を保つことが難しくなります。このような問題がバグ発生率の増加、スクリプトの複雑化に繋がり、開発期間の延長の原因となっています。

フレームワークはコーディングのルールや実装方法を均一化するため、このような開発期間の延長の原因を取り除きます。更に、均一化されたスクリプトにより、保守・メンテナンス性も向上します。

 

このようにフレームワークを使用する上で非常に便利と言われるフレームワークにも下記のように留意すべき点があります。

拡張の問題

拡張の問題とは、枠組を外れた機能の実装が困難となるケースがある点です。つまり、アプリケーションを拡張する際に、フレームワークが提供する仕組みに沿った形で行う必要がでてくるのですが、拡張の仕組みが複雑なフレームワーク、あるいは拡張しようとしている機能が複雑だと、それを実装するために逆に開発日数がかかってしまい、より多くのコストが必要になる場合があります。

習得期間

フレームワークは習得し始めてから数週間~1ヶ月は、全く新しい言語を使用しているような感覚になると言われています。これは手順、規約など、そのフレームワークに即して習得しなければならず、たとえば、データベースの命名、クラス、ファイルの配置など、さまざまなルールを覚えなくてはいけません。フレームワークに慣れてしまえば難しいことはないのですが、それまでは苦労することがあるかもしれません。

デファクトスタンダードの不在と開発の停止

現在さまざまなPHPフレームワークが公開されていますが、その中で特出したもの、デファクトスタンダードがありません。また、中には途中で開発が停止してしまうフレームワークもあります。

PHPでめっちゃ出てくるforeach研究

foreach文は配列に含まれる各要素の値を順に取り出し処理したい場合に便利な文です。書式は次のようになっています。

 

 

foreach(配列変数 as 変数 ){

実行する処理1;

 

実行する処理2;

}

 

要素を取り出す配列と、取り出した要素の値を格納する変数を指定します。foreach文による繰り返しでは、配列に含まれる要素の数だけ繰り返しが行われ、1回繰り返しが行われるたびに配列に含まれる要素の値を変数に代入します。

具体的な例で考えてみます。

$preflist = array('東京', '大阪', '名古屋');

foreach ($preflist as $pref){
  print $pref;
}
 1) 配列「preflist」から要素の値「東京」を変数「pref」に代入
 2) 変数「pref」の値を出力
 3) ブロックの最後に達したのでforeach文の先頭に戻る
 4) 配列「preflist」から要素の値「大阪」を変数「pref」に代入
 5) 変数「pref」の値を出力
 6) ブロックの最後に達したのでforeach文の先頭に戻る
 7) 配列「preflist」から要素の値「名古屋」を変数「pref」に代入
 8) 変数「pref」の値を出力
 9) ブロックの最後に達したが、配列に含まれる要素の数だけ繰り返しを行っ
    たのでforeach文を終了

 

foreach(A as B)

 

はAをBに代入するという意味

 

 

 

 

 

 

復習研究

 

 

 

三項演算子

$result = ( ($dice[0] + $dice[1]) % 2 == 0 )? “true”:”false”;

 

 

 

 

isset() その変数が存在しているかどうかを調べてくれる。

 

引数に調べたい変数を入れてあげてあったら true

なかったら(null)false を返してくれる。

 

配列をkey =>value という指定の仕方をすると

 

keyを選ぶと valueの値を取ってくれる。

 

 

 

 

 

== 数字と文字列を判別しない

=== 数字と文字列を判別する。

 

&&   AかつB

 

||   AあるいはB

 

checkpass() パスワードが正しいかどうかチェックする。

 

 

 

1つのクッキーに複数の値を格納する

1つのサーバからクライアントに送ることが出来るクッキーは1つだけではありません。例えば下記のように複数のクッキーを送ることが出来ます。

setcookie("user", "yamada");
setcookie("pass", "pass");

ただし、クライアントは1つのサーバから受け取ることが出来るクッキーは最大20個まで、全体でも合計300個までのクッキーしか保持できないことになっています。その為、多くのクッキーを利用したい場合には工夫が必要となります。

20個以上のクッキーを送りたい場合には、クッキー名を配列のように扱い、配列の各要素に値をセットします。

setcookie("buy[1]", "Televison");
setcookie("buy[2]", "Video");
setcookie("buy[3]", "Audio");

このようにすると、クッキー名としては「buy」だけが使われますので1つしかクッキーを消費しません。

取り出す時は次のように行います。

$val = $_COOKIE['cookie'];

print($val[1]);
print($val[2]);
print($val[3]);

サンプルプログラム

では試してみましょう。

cookietest5.php

<?php
    setcookie ("buy[1]", "Televison");
    setcookie ("buy[2]", "Video");
    setcookie ("buy[3]", "Audio");
?>

<html>
<head><title>PHP TEST</title></head>
<body>

<?php
    if (isset($_COOKIE["buy"])){
        $val = $_COOKIE["buy"];
        print('<p>');
        print('購入したものは下記の通りです<br>');
        print($val[1].'<br>');
        print($val[2].'<br>');
        print($val[3]);
        print('</p>');
    }else{
        print('<p>値をセットしました</p>');
    }

?>

</body>
</html>

上記ファイルをWWWサーバに設置しブラウザ経由で見ると下記のように表示されます。

PHPで1つのクッキーに複数の値を設定

ブラウザで再読み込みをすると次のように表示されます。

PHPで1つのクッキーに複数の値を設定

 

クッキーを削除する研究

クッキーは必要なくなったら削除できます。不要なクッキーは出来る限り削除しておきましょう。

クッキーを削除するためには、有効期限を昔の時間に設定することで削除します。例えば下記のようにします。

 

 

time() - 1800

 

 

では試してみます。下記では3回アクセスがあったらクッキーを削除してみます。

 

 

<?php
    if (isset($_COOKIE["visited"])){
        $count = $_COOKIE["visited"] + 1;
    }else{
        $count = 1;
    }

    if ($count > 3){
        setcookie("visited", $count, time() - 1800);
    }else{
        setcookie("visited", $count);
    }
?>

<html>
<head><title>PHP TEST</title></head>
<body>

<?php
    print('<p>訪問回数は'.$count.'回目です</p>');
?>

</body>
</html>

 

上記ファイルをWWWサーバに設置しブラウザ経由で見ると下記のように表示されます。

 

PHPでクッキーを削除

 

PHPでクッキーを削除

PHPでクッキーを削除

4回目も表示はされますが、この時点でクッキーは削除されています。

PHPでクッキーを削除

再度再読み込みをするとクッキーが削除されていますので、初期化されて表示されます。

PHPでクッキーを削除

 

 

クッキーの有効期限の設定

クッキーは有効期限を指定しない場合、クライアント側のブラウザが閉じてしまうと消えてしまいます。

ブラウザが閉じてもクッキーを一定期間残しておきたい場合には明示的に有効期限を設定します。

有効期限はsetcookie関数の3番目の引数で指定します。

指定する値はUNIX標準時1970年1月1日からの秒数で指定することになっているため、まず現在時刻のUNIX標準時からの経過秒数を取得し、有効期限を設定したい時間を秒に換算した値を加算して設定すると言う手順になります。

現在時刻のUNIX標準時からの経過秒数はtime関数で取得出来ますので、実際には下記のように行います。

(time関数については『日時を取得する(time, date)』を参照して下さい)

 

有効期限を今から3日間にする場合

time() + 259200

 

 

259200 = 60(秒) * 60(分) * 24(時間) * 3(日)

 

<?php
    if (isset($_COOKIE["visited"])){
        $count = $_COOKIE["visited"] + 1;
    }else{
        $count = 1;
    }

    $flag = setcookie("visited", $count, time() + 180);
?>

<html>
<head><title>PHP TEST</title></head>
<body>

<?php
    print('<p>訪問回数は'.$count.'回目です</p>');
?>

</body>
</html>

上記ファイルをWWWサーバに設置しブラウザ経由で見ると下記のように表示されます。下記は数回再読み込みを行っています。

PHPでクッキーの有効期限の設定

このまま3分以上待ってから、再度ブラウザで再読み込みを行うと有効期限が切れてクッキーが消えます。

PHPでクッキーの有効期限の設定

 

クッキーの読み込み研究

次にクライアント側に保存したクッキーを読み取ってみます。

読み取るとは言ってもクライアント側のハードディスクの中身を見に行くわけではありません。クッキーがあるサーバによって保存された時、次に同じサーバに対してアクセスすると、そのサーバによって保存されたクッキーを環境変数としてサーバへ送ります。サーバ側ではクライアントからページの要求などがあった時にクッキーが合わせて送られてきているかを確認するというわけです。

クライアントからクッキーが送られてきたかどうかを調べるには、PHPで定義済みの変数「$_COOKIE」を使うことで確認できます。「$_COOKIE」は連想配列となっており、サーバに送られてきた全てのクッキーが格納された配列です。特定のクッキーの値を調べるには下記のように行います。

 

$val = $_COOKIE["クッキーの名前"]

 

例えば前のページで利用した"visited"という名前のクッキーの値を取り出したい場合には次のように記述します。

 

$val = $_COOKIE["visited"]

 

では実際に試してみます。下記ではまずクッキーの値を調べて、クッキーが送られてきていなければ初期値をクッキーに保存し、クッキーが保存されていたら値を取り出して1追加します。(isset関数については『変数が存在するかどうかの判別(isset)』を参照して下さい)。

<?php

if (isset($_COOKIE["visited"])){ $count = $_COOKIE["visited"] + 1; }else{

$count = 1;

}

$flag = setcookie("visited", $count);

?>

<html>

<head><title>PHP TEST</title></head>

<body>

<?php

print('<p>訪問回数は'.$count.'回目です</p>');

?>

</body>

</html>

 

上記ファイルをWWWサーバに設置しブラウザ経由で見ると下記のように表示されます。

PHPでクッキーの取り出し

ブラウザで再読み込みなどを行うと下記のように訪問回数が増えて行きます。

PHPでクッキーの取り出し

PHPでクッキーの取り出し

 

 

 

 

クッキーの送信研究

クッキーはクライアント側にデータを保存するためのものです。

例えば一度ホームページを閲覧したクライアントに対してクッキーを送信して保存しておいてもらえば、次にホームページにアクセスがあった時にクッキーがあるかどうかを確認することで初めての訪問者なのかどうか調べることができます。

 

setcookie関数を使って用いる。

setcookie bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure]]]]] )

setcookie() は、その他のヘッダ情報と共に 送信するクッキーを定義します。

ほかのヘッダ情報と同様に、 クッキーは、スクリプトによる他のあらゆる出力 よりも前に送信される必要があります。

もしもこの関数をコールする前に何らか の出力がある場合には、setcookie()は失敗し FALSE を返します。

setcookie() が正常に実行されると、TRUE を返します。

この関数はユーザーがクッキーを受 け入れたかどうかを示すことはしません。

パラメータ: name

クッキーの名前 value

クッキーの値 expire

クッキーの有効期限 path

サーバー上での、クッキーを有効としたいパス domain クッキーが有効なドメイン secure 1をセットすると セキュアなHTTPS接続の場合にのみクッキーが 送信されるようになります。

デフォルトは0です 返り値: 正常に実行されるとTRUE

 

 

基本となるクッキーの名前と値

 

 

<?php

           setcookie("visited", 1);

?>

 

 

サンプルプログラム

<?php

    $flag = setcookie("visited", 1);

?>

<html>

<head><title>PHP TEST</title></head>

<body>

<?php

   if ($flag){ print('<p>クッキーを書き込みました</p>');

   }else{ print('<p>クッキーの書き込みに失敗しました</p>');

}

?>

</body>

</html>

これでクライアント側にクッキーを書き込むことが出来ました。次のページで今度はクライアント側に保存されたクッキーの値を読み取ってみます。

(

 

今日のまとめ研究

1、クッキーは期間を決めて保存できるのに対し、セッションはwebブラウザを閉じるまでという制限。安全性高め

 

2、変数==箱の中にいろいろパッケージングするもの

 

3、関数==名前をつけた関数の中にあるものをその名前だけで呼び出す。

function paopao{

いろいろなこと

}

 

paopao 

 

ブラウザでの表示

 

いろいろなことがおこってる。

 

4、パラメーター

 

function check_true($args){

if($args){

echo $args . 'は真です。';

}else{

echo $args . 'は偽です。';

}

}

check_true(1);

 

$args を後で1にしてくれる。

 

 

5、rand(『最小の数字』,『最大の数字』);

 

 

6.,pay.jpはBASEのやつ

 

7、まなぶくんが漁師になってた。

 

8、まなぶくんじゅくで紙食ってたのなつかしい。

 

9、XMLようわからん。

 

10、データベースもっと勉強しよっと