実践! PHP講座 第4号

※ 手っ取り早くPHPを習得したい方へ

『マンモス本』として有名な本をお勧めします!

赤のマンモス本 – PHP4徹底攻略
青のマンモス本 – PHP4徹底攻略 実戦編

=======================
実践! PHP講座 第4号
=======================

あきらです。『実践! PHP講座』第4回を始めます。

4回目にして、この講座の読者もおかげさまで100名を超えました。
読者が増えるのは良い事ですが、その分責任も重くなります。
こういった技術系のものは動作検証が必要なので、かなり時間がかかります。
しかし、あきらは自分でわかっていたはずなので、しっかりやらせていただきます。

それでは、今回も謙虚に始めましょう!

今日から、いよいよノウハウを公開して行きます。

————————————————–
フォーム攻略

この講座ではWebアプリを作成しながらPHPを習得して行きます。
Webアプリを作成するのに欠かせないのがフォーム(formタグ)です。

ここで、ブラウザとPHPのやり取りをざっくり理解しておきましょう。

1. ブラウザがリクエストを送信する。
(1) リクエストヘッダー(Locationなど)
(2) URL, GETパラメータ
(3) POSTパラメータ
(4) ブラウザが保存している該当URLのCOOKIEパラメータ

2. PHPはリクエストを変数として受け取る。
(1) GETパラメータ -> $_GET[パラメータ名]
(2) POSTパラメータ -> $_POST[パラメータ名]
(3) COOKIEパラメータ -> $_COOKIE[パラメータ名]

3. PHPはリクエストとサーバ内の情報を組み合わせてレスポンスを出力する。
(1) レスポンスヘッダー(Content-Type, Set-Cookieなど)
(2) HTMLやファイル

4. ブラウザはレスポンスを受け取り、表示する。

1?4 は一連の動作ですが、次のページとのつながりは基本的にありません。
次のページとのつながりを維持するにはCOOKIEやGET,POSTパラメータを使います。
さらにPHPではこれを拡張して、セッション管理ができます。
セッション管理に関してはまた後で学習します。

さて、ブラウザとサーバはテキストの形でやりとりしています。
ファイルの送受信などでは、バイナリデータを文字列に変換しています。※Tips参照
このため、Perl言語などでは、パラメータを自分で解析する必要があります。
PHPでは自動的に変数へ格納してくれますので、とても楽です。

と、言いたいところですが、単純には行きません。

————————————————–
サンプルプログラム

サンプルプログラムを用意したので、ダウンロードしてください。

01_form.zip

(1) フォルダ C:Inetpubwwwrootakira を作成します。
akira の部分は適当に変更して OK です。
IISを理解しているかたは、仮想フォルダを作成してもOKです。

(2) サンプルプログラムを解凍してできたフォルダを C:Inetpubwwwrootakira に移動します。

————————————————–
解説

それでは、解説して行きます。
ブラウザで確認しながら、エディタでプログラムソースを見てください。

[Step 1]

URL : http://localhost/akira/01_form/step_1.php
PHP : C:Inetpubwwwrootakira/01_form/step_1.php

テキストボックスに を入力して送信すると が \ になってしまうはずです。
これは、php.ini で magic_quotas_gpc = On となっているからです。
ならない方は magic_quotas_gpc = Off としているはずです。
magic_quotas_gpcについて、詳しくはPHPマニュアルを参照してください。

[Step 2]

URL : http://localhost/akira/01_form/step_2.php
PHP : C:Inetpubwwwrootakira/01_form/step_2.php

magic_quotas_gpcが設定されているか判断して対応しています。
この判断がないと が入力できなくなります。
さらに、以下の行を入力してください。
xxx"><input type="text
テキストボックスが増えてしまいました。
原因は、入力した値を単純に表示しているので、ブラウザにとってはHTMLタグとしか判断できないからです。
ソースを表示するとよくわかります。

[Step 3]

URL : http://localhost/akira/01_form/step_3.php
PHP : C:Inetpubwwwrootakira/01_form/step_3.php

html を表示するのに単純な print文 を使わず、html_print関数作成して使いました。
" -> &quot;
< -> &lt;
> -> &gt;
& -> &amp;
などと変換しています。
こんどはテキストエリアを作ってテストしてみました。
html_print関数に不具合があることがわかります。

[Step 4]

URL : http://localhost/akira/01_form/step_4.php
PHP : C:Inetpubwwwrootakira/01_form/step_4.php

html_print関数を改造し、対策しました。
大体よさそうですが、空白の取り扱いに不満が残ります。
表示する際、そのまま空白を表示すると、HTMLの仕様上まとめられてしまいます。

[Step 5]

URL : http://localhost/akira/01_form/step_5.php
PHP : C:Inetpubwwwrootakira/01_form/step_5.php

タグ(preなど)を追加して対応する手もありますが、(空白)-> で対応します。
さて、これから何ページも作成するとして、この関数をすべてコピペしなくてはならないのでしょうか?

[Step 6]

URL : http://localhost/akira/01_form/step_6.php
PHP : C:Inetpubwwwrootakira/01_form/step_6.php
PHP : C:Inetpubwwwrootakira/01_form/akira_html.php

上のほうに
require_once(‘akira_html.php’);
とあります。別ファイルのテキストを取り込むことができます。
こういった作業を「ライブラリ化」といいます。

akira_html.php は自由に使って頂いてかまいません。
実は、これは「常識」ですから。

さて、やっとまともに入力ができるようになりました。
しばらく「攻略」シリーズにしようと思います。

次は「フォーム攻略 ?リロード対策編?」を計画しています。

※ 別の方法で対応している方はどうか教えてください。
ただし、php.ini や .htaccess で対処するのは不可です。
もっと一般性のある方法でないと、
将来パッケージ開発をされる方を困らせることになります。

— 今回のまとめ ———————————-
・ブラウザの送信はPHPは変数として受け取れる。
・php.ini の設定によってはブラウザの送信を正しく受け取れないので対策が必要。
・入力した値を単純に表示するとタグが壊れることがある。
・セキュリティーのためにも入力した値を単純に表示してはならない。
・require, require_once でライブラリを読み込める。

————————————————–
それでは宿題です。あなた自身のために。

今回のプログラムで使った関数について、PHPマニュアルで調べてください。
この講座の目的は生徒を作ることではなく、あなた自身の力をつけることです。

がんばって!

— 今回のTips ————————————
ブラウザとの送受信のように、データを変換してやりとりすることを
エンコード・デコードといいます。
送信側はエンコードし、受信側でデコードします。
暗号化・復号化、圧縮・解凍なども、広い意味ではエンコート・デコードです。

身近なエンコード・デコードは、メール送受信があります。
メールのソースを見ればよくわかりますので一度じっくり読んでみてください。
また、DVDなどの画像もエンコードして保存し、プレーヤーでデコードしています。

通信のプロトコルには、手順とデータのエンコード形式も含まれます。
————————————————–

※ ブログもよろしく! http://akira.bitter.jp/

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください