我有一個包含3個獨立文件輸入字段的表單。我似乎無法找到一種方法在將它們上傳到服務器之前單獨驗證它們的MIME類型。 (前兩個應該只允許MP3文件,而最後一個只允許使用JPEG文件。)在將文件上傳到服務器之前驗證多個文件上傳中的單個文件
我該怎麼做,或者最好在文件上傳後檢查MIME類型,那麼要麼保留它,要麼刪除它並返回錯誤信息?
這裏是我的代碼:
<form action="upload.php" method="post" enctype="multipart/form-data">
<div class="col-2">
<label>
Full MP3 file
<input type="file" name="file_array[]" id="file_array[]" tabindex="1" required>
</label>
</div>
<div class="col-2">
<label>
Sample MP3 file (30-45 seconds)
<input type="file" name="file_array[]" id="file_array[]" tabindex="2" required>
</label>
</div>
<div class="col-2">
<label>
JPEG Cover Art (Recommended 400 x 400 px)
<input type="file" name="file_array[]" id="file_array[]" tabindex="3" required>
</label>
</div>
<div class="col-2">
<label>
<progress id="progressBar" value="0" max="100" style="width:100%;"> </progress>
</label>
</div>
<div class="col-submit">
<input type="submit" value="Upload" class="submitbtn" onclick="uploadFile()">
</div>
</form>
,這是upload.php的
if(isset($_FILES['file_array'])){
$name_array = $_FILES['file_array']['name'];
$tmp_name_array = $_FILES['file_array']['tmp_name'];
$type_array = $_FILES['file_array']['type'];
$size_array = $_FILES['file_array']['size'];
$error_array = $_FILES['file_array']['error'];
for($i = 0; $i < count($tmp_name_array); $i++){
if(move_uploaded_file($tmp_name_array[$i], "../artists/$id/temp/".$name_array[$i])){
echo $name_array[$i]." upload is complete<br>";
} else {
echo "move_uploaded_file function failed for ".$name_array[$i]."<br>";
}
}
}
JavaScript驗證也是最好的建議。你最好用[''](http://stackoverflow.com/questions/181214/file-input-accept-attribute-is-it-useful )過濾器。如果文件內容是瀏覽器聲稱/猜測的,你仍然必須在PHP中斷言。 – mario