<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="imgfile[]" /><br/>
<input type="file" name="imgfile[]" /><br/>
<input type="file" name="imgfile[]" /><br/>
<input type="file" name="imgfile[]" /><br/>
<input type="file" name="imgfile[]" /><br/>
<input type="submit" value="上傳" />
</form>
<?php
$uploadDir = "../uploads/";
$maxFiles = 5;
$allowedTypes = array(
"image/pjpeg", "image/jpeg",
"image/gif",
"image/x-png", "image/png",
"image/bmp"
);
$results = array();
$success = $fail = 0;
for ($i = 0; $i < $maxFiles; $i++) {
if (!isset($_FILES['imgfile']['name'][$i]) || $_FILES['imgfile']['name'][$i] == '') continue;
$name = $_FILES['imgfile']['name'][$i];
$type = $_FILES['imgfile']['type'][$i];
$size = $_FILES['imgfile']['size'][$i];
$tmp = $_FILES['imgfile']['tmp_name'][$i];
$err = $_FILES['imgfile']['error'][$i];
$result = "<tr><td>$name</td><td>" . round($size/1024,2) . " KB</td><td>$type</td><td>";
if ($err !== UPLOAD_ERR_OK) {
$result .= "<font color='red'>上傳錯誤 (code: $err)</font>";
$fail++;
} elseif (!in_array($type, $allowedTypes)) {
$result .= "<font color='red'>檔案類型不允許</font>";
$fail++;
} elseif (file_exists($uploadDir . $name)) {
$result .= "<font color='red'>檔案已存在</font>";
$fail++;
} else {
if (move_uploaded_file($tmp, $uploadDir . $name)) {
$result .= "成功";
$success++;
} else {
$result .= "<font color='red'>移動檔案失敗</font>";
$fail++;
}
}
$result .= "</td></tr>";
$results[] = $result;
}
if (empty($results)) {
die("未選擇任何檔案");
}
?>
<table border="1" cellpadding="4" cellspacing="0">
<tr><th>檔名</th><th>大小</th><th>類型</th><th>結果</th></tr>
<?php foreach ($results as $r) echo $r; ?>
<tr><td colspan="4">共 個,成功 ,失敗 </td></tr>
</table>
getimagesize() 或 finfo_file() 檢測真實 MIME 型態,防止偽裝副檔名uniqid() 或雜湊值重新命名,避免同名衝突與惡意腳本執行php_flag engine off)php.ini 設定 upload_max_filesize、post_max_size;程式中再次檢查755,檔案 644,擁有者為 Web 使用者搭配 FormData + XMLHttpRequest 或 fetch API 可實現無刷新上傳與進度條顯示。