戻る

複数のファイルをまとめてアプロードする

アップロードするファイル名を入力するテキストボックスのname属性を配列にすると、一度の複数のファイルをアップロードする仕組みを作れます。この例では、4つまでのファイルを一度にアップロードできます。単一ファイルのアップロードと異なる点は、主として次の3点です。

①HTMLフォームの<input>タグのname属性を「upload[]」のような配列にする

②受け取り側のPHPスクリプトでは、「$_FILE["uploadfile"]["name"][0]や「$_FILE["uploadfile"]["name"][1]のような多次元のインデックス指定によって、個々のアップロードファイル情報を取り出す

③ループによって配列のインデックスを操作し、4つのアップロードを順番に処理する

<?php
header("Content-type: text/html; charset=utf-8");

if (isset($_POST["btnExec"])) {
	//実行ボタンがクリックされたとき

	//4つのアップロードファイルを処理するループ
	for ($cnt = 0; $cnt < 4; $cnt++) {

		//エラーメッセージを初期化
		$errmsg = "";

		if(strlen($_FILES["uploadfile"]["name"][$cnt]) > 0 ) {
			//画像ファイルがアップロードされたとき

			//アップロードされたファイルの情報を取得
			$fileinfo = pathinfo($_FILES["uploadfile"]["name"][$cnt]);
			//ファイルの拡張子を取得して大文字に変換
			$fileext = strtoupper($fileinfo["extension"]);

			if ($_FILES["uploadfile"]["size"][$cnt] > 102400) {
				//アップロードファイルのサイズ上限をチェック
				$errmsg .= "ファイルサイズが大きすぎます! 100KB以下にしてください。<br>";
			}
			elseif ($_FILES["uploadfile"]["size"][$cnt] == 0) {
				//アップロードファイルのサイズ下限をチェック
				$errmsg .= "ファイルが存在しないか空のファイルです!<br>";
			}
			elseif ($fileext != "GIF" and $fileext != "JPG" ) {
				//アップロードファイルの拡張子をチェック
				$errmsg .= "対象ファイルはGIFまたはJPGのみです!<br>";
			}
			else {
				//アップロードされたファイルを正規に配置するパスを設定
				//ここではimagesディレクトリの下に"upf_"+元の名前で配置
				$movetofile = "images/upf_" . $_FILES["uploadfile"]["name"][$cnt];
				//アップロードされたテンポラリファイルを正規の場所に移動
				if (! move_uploaded_file($_FILES["uploadfile"]["tmp_name"][$cnt], $movetofile)) {
					$errmsg .= "ファイルのアップロードに失敗しました。<br>";
				}
			}

			if ($errmsg == "") {
				//正常にアップロードされたときはその画像を表示
				echo $_FILES["uploadfile"]["name"][$cnt];
				echo "<img src='$movetofile'><br>";
			}
			else {
				//いずれかのエラーがあったとき
				//エラーメッセージを表示
				echo $errmsg . "<br><br>";
				//アップロードされたテンポラリファイルを削除
				@unlink($_FILES["uploadfile"]["tmp_name"][$cnt]);
			}
		}
	}
	echo "<br><br>";
}
?>
<!DOCTYPE HTML>
<html lang="ja-JP">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
アップロードする画像ファイルを指定して[実行]ボタンをクリックしてください。
<form action="<?=$_SERVER["PHP_SELF"]?>" method="POST" enctype="multipart/form-data">
<input type="file" name="uploadfile[]" size="60"><br>
<input type="file" name="uploadfile[]" size="60"><br>
<input type="file" name="uploadfile[]" size="60"><br>
<input type="file" name="uploadfile[]" size="60"><br>
<br>
<input type="submit" name="btnExec" value="実行">
</form>
</body>
</html>

inserted by FC2 system