Массив $ _FILES не пуст после загрузки

Вот форма

form action="index.php" method="POST" enctype="multipart/form-data" > <input type="file" name="image[]" multiple="multiple"> <input type="submit" value="upload"> </form> 

Я пытаюсь запустить свой код только тогда, когда if(!empty($_FILES['image'])){ но по какой-то причине массив не пуст после отправки файлов и только нажав кнопку submit.

Вот остальная часть кода, если это поможет, спасибо.

 <html> 

Загрузка изображения

  <form action="index.php" method="POST" enctype="multipart/form-data" > <input type="file" name="image[]" multiple="multiple"> <input type="submit" value="upload"> </form> <?php include 'connect.php'; if(!empty($_FILES['image'])){ echo $_FILES['image']['error']; $allowed = array('jpg', 'gif', 'png', 'jpeg'); $count = 0; foreach($_FILES['image']['name'] as $key => $name){ $image_name = $name; $tmp = explode('.', $image_name); $image_extn = strtolower(end($tmp)); //can only reference file $image_temp = $_FILES['image']['tmp_name'][$count]; $filesize = filesize($_FILES['image']['tmp_name'][$count]); $count = $count +1; if(count($_FILES['image']['tmp_name']) > 5){ echo "You can upload a maximum of five files."; break; } else if(in_array($image_extn, $allowed) === false){ echo $name." is not an allowed file type<p></p>"; } else if($filesize > 1024*1024*0.3){ echo $name." is too big, can be a maximum of 3MB"; } else{ $image_path = 'images/' . substr(md5($name), 0, 10) . '.' . $image_extn; move_uploaded_file($image_temp, $image_path); mysql_query("INSERT INTO store VALUES ('', '$image_name', '$image_path')") or die(mysql_error()); $lastid = mysql_insert_id(); $image_link = mysql_query("SELECT * FROM store WHERE id = $lastid"); $image_link = mysql_fetch_assoc($image_link); $image_link = $image_link['image']; echo "Image uploaded.<p></p> Your image: <p></p><a href = $image_link>$image_path</a>"; } } } else{ echo "Please select an image."; } ?> 

is_uploaded_file этого используйте is_uploaded_file PHP is_uploaded_file :

 if(is_uploaded_file($_FILES['image']['tmp_name'])) { //code here } 

http://php.net/manual/en/function.is-uploaded-file.php

Вот как $_FILES массив $_FILES когда ничего не загружено

 Array ( [image] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) ) 

Поэтому он никогда не бывает пустым.

Код ошибки 4 [error] => 4 указывает, что файл не был загружен, а code 0 ошибки code 0 указывает на отсутствие ошибки и файл был загружен, чтобы вы могли проверить

 if($_FILES['image']['error']==0) { // file uploaded, process code here } 

Вот еще один ответ на SO.

Прежде всего вы должны взглянуть на руководство по PHP, потому что – вы не первый из них с этой проблемой – решение было написано там :

Если файл не выбран для загрузки в вашу форму, PHP вернет $_FILES['userfile']['size'] как 0 и $_FILES['userfile']['tmp_name'] как none.

Поэтому, если вы действительно хотите узнать, был ли отправлен какой-либо файл для элемента image , проверьте его:

  $noFile = $_FILES['image']['size'][0] === 0 && $_FILES['image']['tmp_name'][0] === ''; 

Да, это просто.

Тестирование, которое вы использовали:

 empty($_FILE); 

сообщит только, была ли представлена ​​вся форма или нет. Итак, пример полностью:

 $submitted = empty($_FILE); if ($submitted) { $noFile = $_FILES['image']['size'][0] === 0 && $_FILES['image']['tmp_name'][0] === ''; if ($noFile) { ... } } 

Значение проверки не равно нулю:

 in_array(!null,$_FILES['field_name']['name']) 
 if($_FILES['image']['error'] === UPLOAD_ERR_OK) { // Success code Goes here .. } 

UPLOAD_ERR_OK возвращает значение 0, если нет ошибки, файл был загружен успешно.

http://php.net/manual/en/features.file-upload.post-method.php

Если файл не выбран для загрузки в вашу форму, PHP вернет $ _FILES ['userfile'] ['size'] как 0 и $ _FILES ['userfile'] ['tmp_name'] как none.

Вы получаете запись массива на поле загрузки «файл», даже если пользователь не выбрал файл для загрузки.

Я столкнулся с этой проблемой с множественным вводом файла. То, что я нашел, чтобы работать для проверки того, был ли выбран какой-либо файл, является:

 <?php $size_sum = array_sum($_FILES['img']['size']); if ($size_sum > 0) { // at least one file has been uploaded } else { // no file has been uploaded } ?> 
 if(!empty($_FILES['image']['name'][0]) || !empty($_FILES['image']['name'][1]) || !empty($_FILES['image']['name'][2])) 

или

 for($1=0;$i<count($_FILES['image']);$i++){ if(!empty($_FILES['image']['name'][$i])){ // do something } } 
 if(isset($_FILES['file'])){//do some thing here}