実践! PHP講座 第6号

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

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

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

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

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

今回からバックナンバーの公開を再開しました。
読者を増やすにはバックナンバーを公開したほうが良いと判断したからです。

メールマガジンを発行し始めてから、迷惑メールが届くようになりました。
そのため今週はいらいらしっぱなしでした。

それはさておき、今回はファイルのアップロード編です。
PHPにはファイルのアップロードを助ける機能があります。
しかし、正しい理解が必要です。

それでは、今回も落ち着いて始めましょう!

————————————————–
フォーム攻略 ?ファイルアップロード編?

ファイルのアップロードが出来ると、アプリケーションの幅が広がります。
たとえばブログを作成する場合、画像や添付ファイルのアップロードは必要
でしょう。
また、ExcelやCSV形式のファイルをアップロードしてデータベースを更新
することが考えられます。

設定ファイルを更新するにも、テキストエリアにコピペするより、ファイル
アップロードで済ます方がスマートでしょう。

まず、基本的な理解を深めるため、マニュアルを読みましょう。

http://www.php.net/manual/ja/features.file-upload.php

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

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

http://akira.bitter.jp/magazine/03_upload.zip

前回同様に解凍し、移動します。

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

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

[Step 1]

URL : http://localhost/akira/03_upload/step_1.php
PHP : C:Inetpubwwwrootakira/03_upload/step_1.php

まず、ファイルをアップロードした場合の動作を確認しましょう。
このとき便利なのが print_r() 関数です。変数を見やすく表示できます。
preタグと組み合わせるとなお良いでしょう。

formタグに enctype=”multipart/form-data” パラメータが指定されている事
に注意してください。ファイルのアップロードには必須です。
通常のフォームに指定しても支障はありません。あきらはファイルアップロード
の有無に関わらず指定するようにしています。

適当なファイルを参照して送信すると、$_POST, $_FILES の値が設定されます。
$_POST には file_1 が無く、$_FILES に file_1 があることに注目してください。

Perl 等の経験がある方にはもうこれだけの情報で十分かもしれません。

ファイルをアップロードすると $_FIlES に以下の値がセット割されます。

$_FILES[‘file_1’]
$_FILES[‘file_1’][‘name’] … アップロードしたファイル名
$_FILES[‘file_1’][‘type’] … ブラウザにより一応設定されます
$_FILES[‘file_1’][‘tmp_name’] … アップロードしたテンポラリファイル名
$_FILES[‘file_1’][‘error’] … エラーコード
$_FILES[‘file_1’][‘size’] … アップロードしたファイルサイズ

実用的なのは以下です。

$_FILES[‘file_1’] … 送信された場合設定(isset()関数でチェック)
$_FILES[‘file_1’][‘tmp_name’] … 実際に操作できるファイル名
$_FILES[‘file_1’][‘size’] … エラーの場合 0

アップロードされたファイルは php.ini で設定した upload_tmp_dir
に作成されます。
この講座では C:PHPuploadtemp となります。

しかし、フォームの送受信が完了すると、ファイルは残っていません。
ファイルがアップロードされた場合、保存する必要があります。

保存用にフォルダを作成しましょう。

C:Inetpubwwwrootakira3_uploadupload

IUSER_* にフルアクセス権限を与えておきます。

[Step 2]

URL : http://localhost/akira/03_upload/step_2.php
PHP : C:Inetpubwwwrootakira/03_upload/step_2.php

ファイルを保存し、保存したファイル名をセッション変数に保持しています。
基本的な動作はこれでOKです。

こんどは、チェックを追加してみましょう。

[Step 3]

URL : http://localhost/akira/03_upload/step_3.php
PHP : C:Inetpubwwwrootakira/03_upload/step_3.php

2Mバイト以下の画像ファイルに限定してみました。
このようにファイルのチェックは自前で作成する必要があります。
この自前のチェックをちゃんと作ることが重要です。

PHPではこのようにファイルのアップロードは比較的簡単にできます。
ただ、このようにツボを押さえておく必要があります!

次は「フォーム攻略 ?JavaScript編?」を計画しています。

— 今回のまとめ ———————————-
・formタグに enctype=”multipart/form-data” が必要。
・アップロードしたファイルはただちに保存する必要がある。
・アップロードしたファイルのチェックは自分で作成する。

————————————————–
今回は宿題はありません。出来ればテキストファイルのアップロードのため、
文字コードの変換について予習しておいてください。

しっかりと!

— 今回のTips ————————————
multipart/form-data の詳細

Perlの場合、
GETパラメータは $ENV{‘QUERY_STRING’} に格納されています。
COOKIEパラメータは $ENV{‘HTTP_COOKIE’} に格納されています。
POSTパラメータは 標準入力(STDIN)を開いて読み込みます。

Perlでは、これらの値をデコードする必要があります。

multipart/form-data は、以下の形式で受け取ります。

— 下の行から —
multipart/form-data; boundary=(境界文字列)
–(境界文字列)
Content-Disposition: form-data; name=”タグのname”

タグの値
–(境界文字列)
Content-Disposition: form-data; name=”タグのname”; filename=”ファイル名”
Content-Type: ファイルタイプ

タグの値
–(境界文字列)–
— 上の行まで —

添付ファイルを含むメールの場合と似ています。
————————————————–

コメントする

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

*

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