※ 手っ取り早く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:Inetpubwwwrootakira 3_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: ファイルタイプ
タグの値
–(境界文字列)–
— 上の行まで —
添付ファイルを含むメールの場合と似ています。
————————————————–