developer's diary

最近はc#のエントリが多いです

HTML5のmuliple属性をつけた複数ファイルのアップロードをPHPで受け止めてみた。(メモ)

クライアント側。inputにmultiple属性をつけてるのとnameを配列にしている。

<form action="uplod.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="file[]" multiple>
    <input type="submit" value="Upload" />
</form>

鯖側で$_FILEをログに吐いてみる。

Array
(
    [file] => Array
        (
            [name] => Array
                (
                    [0] => Penguins.jpg
                    [1] => Tulips.jpg
                )

            [type] => Array
                (
                    [0] => image/jpeg
                    [1] => image/jpeg
                )

            [tmp_name] => Array
                (
                    [0] => /tmp/phpV8xnID
                    [1] => /tmp/phpsS56kp
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                )

            [size] => Array
                (
                    [0] => 777835
                    [1] => 620888
                )

        )

)

PHPで受け止める。

<?php
while(list($key,$value) = each($_FILES['file']['name']))
{
    $file_name = $_FILES['name'][$key];
    $file_tmp_name = $_FILES['tmp_name'][$key];
    $file_size = $_FILES['size'][$key];
    $file_error = $_FILES['error'][$key];
}

ループでまわしている中でmove_uploaded_fileを行えば複数保存が可能。

chromeとfirefoxとIEで試してみました。
IEではファイルはひとつしか選択できませんでした。