Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
24
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@hidepy

今更だけどPHPで複数のファイルアップロードをめっちゃシンプルに実装する

いつもPHPでファイルアップロードについて調べちゃうのでまとめておく

そうなんですよね。こうした機能を実装する時に調べ時間が数分発生するので、自分用のメモとしてまとめておくことに。

ちなみに、最もシンプルな実装でエラーハンドル等も記述してない。そこは個々人のプロジェクトの環境(誰向けかとかね)やポリシ(エラーハンドルに関する)に従って真面目にやって欲しいと思います。ここでは語りません。

余談ですが、ユーザにファイルアップロードというか入力オペをさせるケースでは、その入力値検証を真面目にやるべきで、ファイルアップロードももちろん考慮が必要です。@mpyw さんがとても良くまとめられている記事があるので是非参考になさってください。

また、正常系のエラーチェック(ファイル種別等による)はこちらのページが参考になります。

PHPで複数ファイルのアップロード

index.php
<?php

// ファイルがあれば処理実行
if(isset($_FILES["upload_file"])){

    // アップロードされたファイル件を処理
    for($i = 0; $i < count($_FILES["upload_file"]["name"]); $i++ ){

        // アップロードされたファイルか検査
        if(is_uploaded_file($_FILES["upload_file"]["tmp_name"][$i])){

            // ファイルをお好みの場所に移動
            move_uploaded_file($_FILES["upload_file"]["tmp_name"][$i], "./images/" . $_FILES["upload_file"]["name"][$i]);
        }
    }
}

?>

<html>

<head>
    <meta charset="utf-8">
    <title>ふぁいるあっぷろーどする</title>
</head>
<body>
    <form aciton="./" method="post" enctype="multipart/form-data">
        <input type="file" multiple name="upload_file[]" />
        <input type="submit" value="そうしん!" />
    </form>
</body>

HTML側のポイントは3点。

  1. enctype="multipart/form-data" をformに設定しておく
  2. input type="file"にmultiple属性を設定しておく
  3. input type="file" のname属性はname="xxx[]"のように配列的にしておく

です。

サーバ側は、$_FILESに値がセットされてくるので、input[file]のname属性で指定したキーで値を抜いて、あとはループしてファイルをお好きなところに移動するだけです。

一番最初に書いた通り、ここではホントは色々エラーチェックしないと危ないので、必要に応じて処理を入れ込みます。

以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
24
Help us understand the problem. What are the problem?