0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

複数画像アップロード/アップロード先の指定(PHP)

Posted at

はじめに

複数画像を指定のディレクトリにアップロードしたいシーンがあったので、忘れないようにここにまとめます。

実装

index.html
<form action="upload.php" method="post" enctype="multipart/form-data">
	<input type="file" name="files[]" multiple>
	<input type="submit" value="アップロード">
</form>
upload.php
foreach ($_FILES["files"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["files"]["tmp_name"][$key];
        $name = basename($_FILES["files"]["name"][$key]);
        $upload_path = "./img/".$name; //upload先のパス
        move_uploaded_file($tmp_name, $upload_path);
    }
}

複数画像アップロード

enctype="multipart/form-data"

画像をアップロードするためにはフォームでenctype="multipart/form-data"を指定する必要があります。

enctype属性は、フォームの送信データのMIMEタイプを設定するための属性です。
属性値にMIMEタイプを示す文字列を指定することで、フォームのデータが送信される際に用いられるMIMEタイプを設定することができます。
type属性の値に「file」が設定されたinput要素をフォームに用いる際は、enctype属性の値に「multipart/form-data」を指定する必要があります。
引用元:enctype属性 | 用語集 | ミツエーリンクス

multiple

multiple属性を設定することで、フォームコントロールが1つ以上の値を受け入れられるようになります。また、name部分でfiles[]のように指定することで、同じnameで配列として取得することができます。

アップロードファイルの移動

POSTされたデータについて

$_FILESにPOSTされたデータが格納されています。以下に、$_FILESの詳細について記載します(※userfileはinputのnameを指しています)。

  • $_FILES['userfile']['name']
    クライアントマシンの元のファイル名。

  • $_FILES['userfile']['type']
    ファイルの MIME 型。ただし、ブラウザがこの情報を提供する場合。 例えば、"image/gif" のようになります。 この MIME 型は PHP 側ではチェックされません。そのため、 この値は信用できません。

  • $_FILES['userfile']['size']
    アップロードされたファイルのバイト単位のサイズ。

  • $_FILES['userfile']['tmp_name']
    アップロードされたファイルがサーバー上で保存されているテンポラ リファイルの名前。

  • $_FILES['userfile']['error']
    このファイルアップロードに関する エラーコード

  • $_FILES['userfile']['full_path']
    ブラウザからアップロードされたファイルのフルパス。 この値は実際のディレクトリ構造を反映しているとは必ずしも言えないため、 信用できません。 PHP 8.1.0 以降で利用可能です。

今回は、nametmp_nameerrorを使います。

UPLOAD_ERR_OKはエラーがなく、ファイルのアップロードに成功した場合のことです(値:0)。
そのほかにもエラーによって値が決まっているため、詳細は公式ドキュメントを。

ファイルの移動

ファイルアップロードに成功したら、一時ファイルの名前(tmp_name)とファイルの名前(tmp_name)を取得し、move_uploaded_file()で指定の場所に移動させています。

まとめ

今回は、PHPで複数画像のアップロードとアップロード先の指定方法についてまとめました。

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?