[[ノート/ノート]]~

訪問者数 &counter();      最終更新 &lastmod();

**PHPで複数ファイルを同時にアップロードする [#idf7308d]
-ファイルアップロードの時に、1回の選択で複数ファイルを選択してアップロードする機能が、HTML5にて規格化された。

-HTML5対応のブラウザFireFoxなどでは、使うことができる。

-サーバー側はCGIインターフェースが対応していればよいが、たとえばapache+PHPなどが対応。 Pythonでも使える ⇒ [[PythonをCGIプログラムとして使う>ノート/PythonをCGIプログラムとして使う]]

-[[PHPのマニュアルページ:http://php.net/manual/ja/feature-fileupload.multiple.php]]

-従来の、単一ファイルしかアップロードできない時に、複数ファイルをアップロードするには、こうしなければならなかった。
 <form action="file-upload.php" method="post" enctype="multipart/form-data">
   Send these files:<br />
   <input name="userfile[]" type="file" /><br />
   <input name="userfile[]" type="file" /><br />
   <input type="submit" value="Send files" />
 </form>
 上記のフォームで投稿された場合、配列 $_FILES['userfile'], つまり、
 $_FILES['userfile']['name'][i], $_FILES['userfile']['size'][i], $_FILES['userfile']['tmp_name'][i],
 $_FILES['userfile']['type'][i] 
 が設定されます。
 例えば、ファイル名が /home/test/review.html および /home/test/xwp.out のファイルが 投稿されると、
 $_FILES['userfile']['name'][0] の値が review.html となり、$_FILES['userfile']['name'][1] の値が
 xwp.out となります。
 尚、max_file_uploads は一回のリクエストあたりでアップロードできるファイルの数の制限値となります。

-HTML5では、ファイル複数同時アップロードができる規格が導入された
--開設記事~
--解説記事~
[[HTML5でファイル複数同時アップロード:http://suin.asia/2011/01/23/html5_input_multiple]]
 <form action="file-upload.php" method="post" enctype="multipart/form-data">
   Send these files:<br />
   <input name="userfile[]" type="file" multiple/><br />
   <input type="submit" value="Send files" />
 </form>
--上記<input type="file">のところに、multiple と指定するだけ。これで、選択画面で複数ファイルを同時選択(WindowsならばCTRLキーを押しながら左クリック)できる。

-これを使った、もう少し実際的な(動いた)プログラムの例:
 multifile.html    (formを書いている側)
 <html>
 <body>
 <form action="multifile.php" method="post" enctype="multipart/form-data">
   Send these files:<br />
   <input type="hidden" name="MAX_FILE_SIZE" value="300000" />
   <input name="userfile[]" type="file" multiple/><br />    <--- ここにmultiple指定
   <input type="submit" value="Send files" />
 </form>
 </body>
 </html>
 
 multifile.php    (formのactionで起動される側)
 <?php
   $count = count($_FILES['userfile']['name']);
   print($count . '<br>');
   for ($i=0; $i<$count; $i++) {
     print($_FILES['userfile']['name'][$i] . '<br>');
     print($_FILES['userfile']['tmp_name'][$i] . '<br>');
 
     if (is_uploaded_file($_FILES["userfile"]["tmp_name"][$i])) {
       if (move_uploaded_file($_FILES["userfile"]["tmp_name"][$i], "files/" . $_FILES["userfile"]["name"][$i])) {
         chmod("files/" . $_FILES["userfile"]["name"][$i], 0644);
         echo $_FILES["userfile"]["name"][$i] . "をアップロードしました。<br>";
       } else {
         echo "ファイルをアップロードできません。<br>";
       }
     } else {
       echo "ファイルが選択されていません。<br>";
     }
   }
 ?>

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS