Проверьте php.ini для:
file_uploads = On
post_max_size = 100M
upload_max_filesize = 100M
- Возможно, вам придется использовать
.htaccess
или .user.ini
, если вы пользуетесь виртуальным хостингом и не имеете доступа к php.ini
. - Убедитесь, что вы редактируете правильный INI-файл - используйте функцию
phpinfo()
, чтобы убедиться, что ваши настройки действительно применяются. - Также убедитесь, что вы не ошиблись в размерах - это должно быть
100M
, а не 100MB
.
Makeубедитесь, что ваш тег <form>
имеет атрибут enctype="multipart/form-data"
.Никакой другой тег не будет работать, это должен быть ваш тег FORM.Дважды проверьте правильность написания .Дважды проверьте, что multipart / form-data окружены прямыми цитатами, а не умными цитатами, вставленными из Word OR из блога веб-сайта (WordPress преобразует прямые кавычки в угловые кавычки!).Если у вас есть несколько форм на странице, убедитесь, что у них обоих есть этот атрибут.Введите их вручную или попробуйте ввести одинарные кавычки, введенные вручную.
Убедитесь, что у вас нет двух полей входного файла с одинаковым атрибутом name
.Если вам нужно поддерживать несколько, поместите квадратные скобки в конце имени:
<input type="file" name="files[]">
<input type="file" name="files[]">
Убедитесь, что в ваших каталогах tmp и upload установлены правильные разрешения на чтение и запись.Временная папка загрузки указана в настройках PHP как upload_tmp_dir
.
Убедитесь, что в папках назначения файлов и tmp / upload нет пробелов.
Убедитесь, что все <form>
на вашей странице имеют </form>
закрывающих тегов.
Убедитесь, что ваш тег FORM имеет method="POST"
.GET-запросы не поддерживают загрузку данных multipart / form-data.
Убедитесь, что ваш тег ввода файла имеет атрибут NAME.Атрибут ID НЕ является достаточным!Атрибуты ID предназначены для использования в DOM, а не для полезных нагрузок POST.
Убедитесь, что вы не используете Javascript для отключения поля <input type="file">
при отправке
Убедитесь, что вы не вкладываете формы, такие как <form><form></form></form>
Проверьте структуру HTML на наличие недопустимых / перекрывающихся тегов, таких как <div><form></div></form>
Также убедитесь, что в загружаемом файле нет никаких буквенно-цифровых символов.
Однажды я просто часами пытался выяснить, почему это происходит ся вдруг.Оказалось, что я изменил некоторые настройки PHP в .htaccess
, и одна из них (не знаю, какая именно) вызывала сбой загрузки и $_FILES
была пустой.
Вы можете попытаться избежать подчеркивания (_
) в атрибуте name=""
тега <input>
Попробуйте загрузить очень маленькие файлы, чтобы сузить, является ли это файлпроблема размера.
Проверьте доступное дисковое пространство.Хотя это очень редко, это упоминается в этом комментарии на странице руководства PHP :
Если массив $ _FILES внезапно становится загадочно пустым, даже если ваша форма кажется правильной, вы должны проверитьдисковое пространство, доступное для вашего временного раздела папки.В моей установке загрузка всех файлов не прошла без предупреждения.После большого скрежета зубов я попытался освободить дополнительное пространство, после чего загрузка файлов неожиданно снова заработала.
Убедитесь, что вы не отправляете форму через AJAX POSTзапрос вместо обычного запроса POST, который вызывает перезагрузку страницы.Я прошел все пункты списка выше и, наконец, обнаружил, что причина, по которой моя переменная $ _FILES была пустой, заключалась в том, что я отправлял форму с помощью запроса AJAX POST.Я знаю, что существуют методы для загрузки файлов с использованием ajax, но это может быть веской причиной, по которой ваш массив $ _FILES пуст.