PHP - ファイルアップロード
こんにちは、PHP開発者の卵さんたち!今日は、PHPを使ったファイルアップロードの楽しい世界に飛び込みます。あなたの近所の親切なコンピュータ先生として、私はこの旅をステップバイステップで案内します。お気に入りの飲み物を手に取り、リラックスして、一緒にこのファイルアップロードの冒険を楽しんでいきましょう!
ファイルアップロードの理解
コードに飛び込む前に、まずファイルアップロードとは何かを理解しましょう。友達に手紙を送るのを思い浮かべてください。手紙を書き、封筒に入れ、郵便局を通じて送ります。ファイルアップロードも非常に似ています!手紙ではなく、ファイル(画像やドキュメントなど)を自分のコンピュータからウェブサーバーに送信しています。
ファイルアップロードフォームの作成
私たちのファイルアップロードの旅の最初のステップは、ユーザーがファイルを選択してアップロードできるHTMLフォームを作成することです。このフォームは、手紙を送るための封筒に例えられます。
簡単なHTMLフォームを作成しましょう:
<form action="upload.php" method="post" enctype="multipart/form-data">
アップロードする画像を選択してください:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="画像をアップロード" name="submit">
</form>
これを分解してみましょう:
-
action="upload.php"
: フォームがデータを送信する場所を指定します。この場合、ファイルアップロードを処理するためのPHPスクリプト「upload.php」を作成します。 -
method="post"
: データを送信する方法をPOSTに指定します。 -
enctype="multipart/form-data"
: これは非常に重要です!フォームがテキストだけでなくファイルも送信することを知らせます。 -
<input type="file">
: ユーザーがコンピュータからファイルを選択できるボタンを作成します。
アップロードスクリプトの作成
フォームができたので、ファイルアップロードを処理するPHPスクリプトを作成しましょう。ここで魔法が起きます!
「upload.php」ファイルを作成しましょう:
<?php
if(isset($_POST["submit"])) {
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// ファイルがすでに存在するか確認
if (file_exists($target_file)) {
echo "申し訳ありません、ファイルはすでに存在しています。";
$uploadOk = 0;
}
// ファイルサイズを確認
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "申し訳ありません、ファイルが太大です。";
$uploadOk = 0;
}
// 特定のファイル形式を許可
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "申し訳ありません、JPG、JPEG、PNG、GIFファイルのみ許可されています。";
$uploadOk = 0;
}
// エラーにより$uploadOkが0に設定されているか確認
if ($uploadOk == 0) {
echo "申し訳ありません、ファイルはアップロードされませんでした。";
// すべてが問題ない場合、ファイルをアップロードしてみます
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "ファイル " . basename( $_FILES["fileToUpload"]["name"]) . " がアップロードされました。";
} else {
echo "申し訳ありません、ファイルのアップロード中にエラーが発生しました。";
}
}
}
?>
これは多くのコードです!ステップバイステップで分解しましょう:
1.まず、フォームが送信されたかを確認します:isset($_POST["submit"])
。
2.いくつかの変数を設定します:
-
$target_dir
: アップロードされたファイルを保存するディレクトリ。 -
$target_file
: アップロードされたファイルのフルパス。 -
$uploadOk
: ファイルをアップロードするかどうかを追跡するフラグ。 -
$imageFileType
: アップロードされたファイルの拡張子。
3.いくつかの確認を行います:
- ファイルがすでにアップロードディレクトリに存在するか?
- ファイルが太大なのか?
- ファイル形式が許可されているか?
4.これらの確認のいずれかが失敗した場合、$uploadOk
を0に設定します。
5.最後に、すべてが問題ない場合($uploadOk == 1
)、move_uploaded_file()
関数を使ってアップロードされたファイルを一時的な場所からアップロードディレクトリに移動します。
一般的なファイルアップロードメソッド
以下はPHPファイルアップロードでよく使われるメソッドの表です:
メソッド | 説明 |
---|---|
$_FILES["file"]["name"] |
クライアントマシン上のファイルの元の名前 |
$_FILES["file"]["type"] |
ファイルのMIMEタイプ |
$_FILES["file"]["size"] |
ファイルのサイズ(バイト) |
$_FILES["file"]["tmp_name"] |
サーバー上のファイルの一時的な名前 |
$_FILES["file"]["error"] |
このファイルアップロードに関連するエラーコード |
move_uploaded_file() |
アップロードされたファイルを新しい場所に移動します |
結論
そして、ここまでです、みんな!私たちはユーザーがファイルを選択できるフォームを作成し、アップロードプロセスを処理するPHPスクリプトを作成し、エラーチェックとファイル形式制限を含めました。
ファイルアップロードは適切に処理されないとセキュリティリスクになることを忘れないでください。常にユーザーの入力を検証し、ファイルの形式とサイズを制限し、アップロードされたファイルをブラウザから直接アクセスできないディレクトリに保存してください。
このレッスンを終える際、ある生徒がプロフィール画像用のウェブサイトに1GBのビデオファイルをアップロードしたことが思い出されました。結果は良くなかったですね!だから、ファイルサイズの制限を設定することを忘れないでください!
練習を続け、コーディングを続け、最も重要なのは、PHPを楽しむことです!次回まで、ハッピーなアップロードを!
Credits: Image by storyset