2014-01-02 2 views
0

Я пытаюсь напечатать имя нескольких файлов, но массив uploaded ничего мне не дает. Что я могу сделать?Ошибка при загрузке файлов PHP

<?php 
    if (!empty($_FILES['file'])) { 
     foreach ($_FILES['file']['name'] as $key => $name) { 
      if ($_FILES['file']['error'][$key] == 0 && move_uploaded_file($_FILES['file']['tmp_name'][$key], "files/{$name}")) { 
       $uploaded[] = $name; 
      } 
     } 
     print_r($uploaded); 
    } 
?> 

<!doctype html> 

    <body> 
     <div> 
      <form action="" method="post" encype="multipart/form-data"> 
       <div> 
        <input type="file" name="file[]" multiple="multiple"> 
        <input type="submit" value="Upload"> 
       </div> 
      </form> 
     </div> 
    </body> 
+0

Есть ли что-нибудь в массиве '$ _FILES'? – qwertynl

+0

Является ли ваш массив массивов установленным? Возможно, вы не попадаете в свой оператор 'if' – ajtrichards

+0

, убедитесь, что' $ _FILES ['file'] ['name'] 'существует, затем убедитесь, что' $ _FILES ['file'] ['error'] [$ key ] 'существует, и что' move_uploaded_file' возвращает 'true'. Одна из этих трех вещей не происходит. – castis

ответ

0

Я бы порекомендовал рефакторинг вашего кода следующим образом; обратите внимание на добавление двух array_key_exists проверок, а также как $uploaded = array(); в инициализировать $uploaded массив перед циклом:

<?php 
    if(!empty($_FILES['file'])) { 
     $uploaded = array(); 
     if (array_key_exists('name', $_FILES['file'])) { 
      foreach($_FILES['file']['name'] as $key => $name) { 
       if(array_key_exists('error', $_FILES['file']) $_FILES['file']['error'][$key] == 0 && move_uploaded_file($_FILES['file']['tmp_name'][$key], "files/{$name}")) { 
        $uploaded[] = $name; 
       } 
      } 
     } 
     print_r($uploaded); 
    } 
?> 

Но я также рекомендовал бы делать очень простую проверку отладки в самом начале кода, чтобы увидеть, если $_FILES имеет что-нибудь в:

<?php 
    echo '<pre>'; 
    print_r($_FILES); 
    echo '</pre>'; 
    if(!empty($_FILES['file'])) { 
    … 

Но, глядя на ваш HTML файл, ваш <form action="" пуст:

<form action="" method="post" encype="multipart/form-data"> 

Что произойдет, если изменить что:

<form action="#" method="post" encype="multipart/form-data"> 

Или даже get rid of the action entirely:

<form method="post" encype="multipart/form-data"> 

Я думаю, что это проблема, так как ваша форма в HTML5 и action="" установлен, он никогда не будет Работа. В частности as outlined in the HTML5 spec:

Атрибуты действий и содержание formaction, если указано, должно иметь значение, которое является допустимым URL потенциально окружен пробелами.

+0

Посмотрите мое последнее редактирование. – JakeGould

+1

Это было просто «t», отсутствующее в enctype = «multipart/form-data» – rexhin

Смежные вопросы