フォーム内のファイルアップロードタグが配列形式で指定されていれば、複数のファイルを同時にアップロードできます。
例を見てみましょう:
----------------------------------------------- - -------------------
function Upload($file_error, $file_tmp_name, $file_name){ $info = ""; if($file_name == "") return $info; switch($file_error){ case UPLOAD_ERR_INI_SIZE: $info = $file_name. ": ファイル サイズがサーバーの制限を超えています"; Break; case UPLOAD_ERR_FORM_SIZE: $info = $file_name ":ファイル サイズがブラウザの制限を超えています"; Break; case UPLOAD_ERR_PARTIAL: $info = $file_name. ": ファイルの一部のみがアップロードされました"; Break; case UPLOAD_ERR_NO_FILE: $info = $file_name. ":なし ファイルがアップロードされました"; ブレーク; case UPLOAD_ERR_NO_TMP_DIR: $info = $file_name. ": 一時フォルダーが見つかりません"; ブレーク; case UPLOAD_ERR_CANT_WRITE: $info = $file_name. ": ファイルの書き込みに失敗しました" ; ブレーク; case UPLOAD_ERR_OK: $upload_dir = './'.iconv("UTF-8","gb2312",$file_name); if(file_exists($upload_dir)){ $info = $file_name ":同じ名前のファイルはすでに存在します"; }else{ if(move_uploaded_file($file_tmp_name,$upload_dir)){ $info = $file_name.": ファイルは正常にアップロードされました"; }else{ $info = $file_name. ": ファイルのアップロードに失敗しました"; } } Break; } return $info; } if(isset($_POST['submit'])){ $info = ''; $count = count($_FILES['upload_file']['name']); for($i=0; $i<$count; ++$i){ if($_FILES['upload_file'][ 'name' ][$i] == "") 続行; $info = Upload( $_FILES['upload_file']['error'][$i], $_FILES['upload_file'][' tmp_name'] [$i], $_FILES['upload_file']['name'][$i] ); } echo $info; }?>
コードをコピー
----------------------------------------------- - --------------------------------------
コードの実行結果は次のとおりです。
注:
1. では、name="upload_file[]" は配列の形式で名前を付ける必要があります。そうしないと、「初期化されていない文字列オフセット: 0」というエラーが発生します。これは、配列のキー値が範囲外であることを意味します。
2. $_FILES['upload_file']['name'][$i] では、upload_file はフォーム内のアップロード ファイル マーカーの名前です。複数のファイルをアップロードする場合、配列 $_FILES の 3 次元の添字が自動的に追加されます。 0 から開始 順番に番号が付けられます。
|