Search A.I.
Menu
ホーム

メールマガジン ホームページプログラミングテク

Windowsテク
Javaアプレット サンプル
Java Q & A
JavaScript Q & A
Perl Q & A
Perl レッスン
PHP レッスン
PHPテク
MS-DOS コマンド集
UNIX コマンド集
SQL コマンド集
SEの基礎講座
WEBシステム開発受注します
]無料フォームメール送信サービス
リンク集
PHP レッスン

1. PHP の基礎
2. PHPの文法、条件式
3. PHPの文法、条件式 - 続き
4. 配列について
5. ハッシュ配列について
6. 関数について
7. 関数について - 続き
8. 文字列操作関数
9. 配列操作関数
10. ファイル操作
11. ファイル操作 - 続き
12. パラメータの受け渡し
13. クッキーとセッション
14. 総合練習
15. メール送信
16. ファイルアップロード
17. クラスについて
18. クラスについて - 続き
19. MySQL
20. MySQL - 続き(1)
21. MySQL - 続き(2)
22. PostgreSQL
23. 総合練習
24. 総合練習解答



16. ファイルアップロード

今日はファイルアップロードについて、ご説明いたします。

■ファイルアップロードの概要
ユーザから、画像などのファイルをアップロードして保存したい場合などが
あるかと思います。PHPを使用すれば、こういった場合でもブラウザから
ユーザのローカルマシンに入っているファイルをサーバへアップロードして
もらうことができます。

■HTMLの記述
まず、ファイルアップロードをしてもらうためのページを作成します。
ファイルアップロードをするには、通常のフォームではできません。

<form>タグのenctypeに、multipart/form-dataを指定し、ファイル名を指定する
ボックスを用意します。

-----------------------------------------------------------------
<HTML>
<BODY>
<FORM action="upload.php" enctype="multipart/form-data" method="post">
ファイル: <INPUT type="file" name="upload_file" size="32"><BR>
<INPUT type="submit" value="送信">
</FORM>
</BODY>
</HTML>
-----------------------------------------------------------------

enctypeに、multipart/form-dataを指定しない場合は、テキストを送るという
ことになりますが、上記のように記述すると、テキスト以外のバイナリファイル
をアップロードできます。

<input>タグのtypeにfileを指定すると、ファイルの参照ボタンの付いたテキスト
ボックスが表示されます。これにより、ユーザが自分のローカルマシンのファイルを
選んで、アップロードすることができます。

また、ファイルをアップロードしてもらう場合は、必ずPOST送信にしてください。

■受け取り側の処理
アップロードされたファイルを受け取る処理をご説明します。

PHPでは、アップロードされたファイル情報は、$_FILEというハッシュ配列に情報が
格納されています。

-----------------------------------------------------------------
// ファイル名
$file_name = $_FILES["upload_file"]["name"];

// 一時ファイル
$tmp_file = $_FILES["upload_file"]["tmp_name"];

// ファイルサイズ
$file_size = $_FILES["upload_file"]["size"];

// ファイルタイプ
$file_type = $_FILES["upload_file"]["type"];
-----------------------------------------------------------------

上記で、"upload_file"というのは、送信側のHTMLに記述した<INPUT TYPE="file">
のNAMEになります。

ファイル名"name"は、ローカルで指定したファイル名になります。つまり、
sample.jpgというファイルをアップロードした場合、そのままsample.jpgが
得られます。

一時ファイル"tmp_name"というのは、アップロードされたファイルは、一時サーバに
保存され、クライアントにレスポンスを返した時点で、一時ファイルは消されます。
その一時ファイルのパスです。これを利用して、一時ファイルをコピーしたり、
データベースに書き込んだりします。

ファイルサイズ"size"は、ファイルのサイズをバイト数で返します。

ファイルタイプ"type"は、MIMEタイプと呼ばれ、ファイルの形式が分かる文字列を
取得できます。

例えば、GIF画像をアップロードした場合は、、"image/gif"という文字列が得られ
ます。

アップロードされたファイルは、通常、以下のようにコピーして保存します。

-----------------------------------------------------------------
$file_path = "./image.jpg";

// ファイルのコピー
if (!copy($_FILE["upload_file"]["tmp_name"], $file_path)) {
print "コピーに失敗しました。" . $file_path;
exit;
}
-----------------------------------------------------------------

 

★今日のまとめサンプルプログラム
index.php
-----------------------------------------------------------------
<HTML>
<BODY>
<FORM action="upload.php" enctype="multipart/form-data" method="post">
画像ファイル: <INPUT type="file" name="upload_file" size="32"><BR>
<INPUT type="submit" value="送信">
</FORM>
</BODY>
</HTML>
-----------------------------------------------------------------

upload.php
-----------------------------------------------------------------
<HTML>
<BODY>

<?

// ファイル名
$file_name = $_FILES["upload_file"]["name"];

// 保存するファイルパス
$file_path = "./image.jpg";

// ファイルタイプ
$file_type = $_FILES["upload_file"]["type"];

// ファイルのコピー
if (!copy($_FILES["upload_file"]["tmp_name"], $file_path)) {
print "コピーに失敗しました。" . $file_path;
exit;
}

?>

<img src="./<?=$file_path?>"><br>
ファイル名 : <?=$file_name?><br>
MIMEタイプ : <?=$file_type?><br>

</BODY>
</HTML>
-----------------------------------------------------------------

■解説
このサンプルは、画像ファイルをアップロードし、アップロードされたファイルを
表示するプログラムです。

このプログラムを実行すると、PHPの置いてあるディレクトリにアップロードした
ファイルがコピーされます。

取得したファイル名とMIMEタイプも表示されるので、確認してください。

実際にプログラムを組むときは、ファイル名がすでに存在していて、上書きされる
場合もありますので、上書きされないようにする工夫も必要です。

 

★課題
1. サンプルプログラムを改良し、ファイルサイズが100キロバイトを超えたら、
エラーメッセージを表示するプログラムを作成してください。

2. サンプルプログラムを改良し、アップロードファイルのMIMEタイプが、
JPEG以外の形式だった場合に、エラーメッセージを表示するプログラムを作成して
ください。

 

★前回の課題の解答
1. HTML上に、メール送信者(text)、件名(text)、本文(textarea)のフォームを
作成し、POST送信で受け取って、自分のメールアドレスへ送信されるプログラムを
作成してください。

→下のサンプルを参照してください。
index.html
-----------------------------------------------------------------
<HTML>
<BODY>
<FORM action="send_mail.php" method="POST">
あなたのメールアドレス <INPUT type="text" name="mail_from"><br>
件名 <INPUT type="text" name="subject"><br>
本文 <textarea name="body" rows="5" cols="30"></textarea><br>
<INPUT type="submit" value="送信">
</FORM>
</BODY>
</HTML>
-----------------------------------------------------------------

send_mail.php
-----------------------------------------------------------------
<HTML>
<BODY>

<?

// メールヘッダ(送信者のメールアドレス)
$header = 'From: ' . $_POST["mail_from"];

// 宛先のメールアドレス
$mail_to = 'info@searchai.jp';

// 件名
$subject = $_POST["subject"];

// 本文
$mail_body = $_POST["body"];

// JISコードへ変換
$subject = mb_convert_encoding($subject, "JIS");
$mail_body = mb_convert_encoding($mail_body, "JIS");

// メール送信処理
if (mb_send_mail($mail_to, $subject, $mail_body, $header)) {
print "メール送信正常に処理しました。";
}
else {
print "メール送信に失敗しました。";
}

?>

</BODY>
</HTML>
-----------------------------------------------------------------

■解説
宛先の$mail_toは、自分のメールアドレスを指定してください。

前回のレッスンのサンプルに、パラメータを渡すだけですので、それ以外の
説明はなくても分かるかと思います。




前の章へ 次の章へ


このエントリーをはてなブックマークに追加


OfficeLance

お問い合わせはこちらから