Загрузка файла через html-форму. В PHP $_FILES пуст

#php #html #file #web #upload

#php #HTML #файл #веб #загрузка

Вопрос:

Итак, у меня есть этот код:

 <form name="form" action="./" method="post">
<input type="file" name="newfile" id="newfile" />
</form>
  

Когда я запускаю этот php-скрипт на странице действий, ничего не происходит

 echo "$_FILES['newfile']['name'];
print_r($_FILES);
  

Это похоже на то, что $_FILES переменная пуста. Есть ли какой-нибудь способ это исправить?

Ответ №1:

Вам нужно установить enctype="multipart/form-data" атрибут в вашей форме.

Пример 1 из php.net :

 <!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
    <!-- MAX_FILE_SIZE must precede the file input field -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- Name of input element determines name in $_FILES array -->
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>
  

Ответ №2:

Если вы не укажете <form … enctype="multipart/form-data"> , то данные будут закодированы способом, который не поддерживает файлы.

Добавьте атрибут с этим значением.

Из спецификации HTML:

enctype = content-type [CI]

Этот атрибут определяет тип содержимого, используемый для отправки формы на сервер (когда значением метода является «post»). Значением по умолчанию для этого атрибута является «application/x-www-form-urlencoded». Значение «multipart/form-data» следует использовать в сочетании с элементом ВВОДА type=»file».

Из руководства по PHP:

 <!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
  

Ответ №3:

 echo "$_FILES['newfile']['name'];
  

Это синтаксическая ошибка. Должно быть

 echo $_FILES['newfile']['name']; 
  

или

 echo "{$_FILES['newfile']['name']}";