2016-01-13 3 views
-5

Я попытался применить некоторые из существующих образцов, найденных здесь в stackoverflow, но проблема, похоже, не решена.Как исправить неверный аргумент, предоставленный foreach() php?

$valid_formats = array("jpg", "png", "gif", "zip", "bmp"); 
$max_file_size = 1024*1000; 
$path = "upload/"; 
$count = 0; 
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){ 

    foreach ($_FILES['files']['name'] as $f => $name) { 
     if ($_FILES['files']['error'][$f] == 4) { 
      continue; // Skip file if any error found} 
      if ($_FILES['files']['error'][$f] == 0) {   
       if ($_FILES['files']['size'][$f] > $max_file_size) { 
        $message[] = "$name is too large!."; 
        continue; // Skip large files 
       } 
       elseif(! in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats)) { 
     $message[] = "$name is not a valid format"; 
     ... 
+6

'$ _FILES [«файлы»] [«имя»] 'не является массивом. Вот почему вы получаете эту ошибку – urfusion

+0

Правильно объясните свой вопрос. Что вы пробовали? В чем проблема? – Ironic

+0

$ _FILES ['files'] ['name'] заменить этот код на $ _FILES ['files']. (я думаю, если вы отправляете форму из нескольких файлов) –

ответ

0

Как указано в urfusion, $ _FILES ['files'] ['name'] - это строка, а не массив.

Что вы можете сделать, чтобы перебрать все имена файлов из представленных файлов что-то подобное:

if(is_array($_FILES['files']) && !empty($_FILES['files'])){ // if1 
    foreach($_FILES['files'] as $file_index=>$file_value){ 
    if($file_index==='name'){ // if2 
     echo $file_value; // or do something with that name 
    } // end if2 
    } // end foreach 
} // end if1 
Смежные вопросы