- Формы с полем типа "файл" поступает на сервер с "$ POST" пустой
На нашем сервере, размещения, у меня есть два проекта, где они оба модуля в нашей области администрирования для управления изображениями.
проекта , отправить форму на сервер, и массив $_POST
, полученные с сервера с полем для загруженного изображения.
proejcto B, форму для сервера, но массив $_POST
прибывает пустой сервер, несмотря на то, что в Firebug я могу видеть, что поле и изображение загружается были отправлены.
Форма
Равна для проекта B
<form class="horizontal-form" enctype="multipart/form-data" method="post" action="#">
<div class="row-fluid">
<div class="span6">
<div class="control-group">
<label class="control-label">Carregar imagem</label>
<div class="controls">
<div class="fileupload fileupload-new" data-provides="fileupload">
<div class="input-append">
<div class="uneditable-input">
<i class="icon-file fileupload-exists"></i>
<span class="fileupload-preview"></span>
</div>
<span class="btn btn-file">
<span class="fileupload-new">Selecionar ficheiro</span>
<span class="fileupload-exists">alterar</span>
<input type="file" class="default" name="img">
</span>
<a href="#" class="btn fileupload-exists" data-dismiss="fileupload">remover</a>
</div>
</div>
<span class="help-block">Escolha uma imagem para substituir a existente no site.</span>
</div>
</div>
</div>
<div class="span6">
<div class="control-group">
<label class="control-label">Pré-visualizar</label>
<div class="controls">
<div class="thumbnail item" style="width:244px">
<a href="http://www.meusite.com/caminho/para/imagem/imagem.jpg" title="Pré-visualização da imagem: imagem.jpg" class="fancybox-button">
<div class="zoom">
<img src="http://www.meusite.com/caminho/para/imagem/imagem.jpg" alt="" />
<div class="zoom-icon"></div>
</div>
</a>
<div class="details">
imagem.jpg
</div>
</div>
<span class="help-block">Pré-visualizar imagem existente</span>
</div>
</div>
</div>
</div>
<div class="form-actions text-right">
<button type="submit" class="btn blue"><i class="icon-ok"></i> Guardar alterações</button>
<a class="btn" href="?mod=website&call=images" title="">cancelar</a>
</div>
</form>
Информация Firebug
-
Проекта
-
Проекта B
Уже провел серию тестов, таким образом, понять, что может быть пройти, некоторые из которых могут быть уместны, чтобы найти решение для этой проблемы:
-
Файл PHP с не более, чем формы, в верхней отображается.
проекта B o
var_dump($_POST);
дает мне пустой массив. Добавить дополнительное поле типа
hidden
и типаtext
в форме проекта B решает проблему, а массив$_POST
случается поступает на сервер в условия.Скопировать PHP-файл проекта проекта B для проверки каких-либо проблем с файлом себя (???), но результат тот же.
-
Проверка файлов
.htaccess
, чтобы найти то директива в Apache, но оба файла будут строго равны и не содержит указания, кроме того:# Use PHP5 AS DEFAULT AddHandler application/x-httpd-php5 .php # Frontpage # Set the files to be ignored when ussing the directory list IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti* IndexIgnore * # BROWERS SERVER FILES VIEW DISABLE Options -Indexes # CUSTOM ERROR DOCUMENTS FOR APPACHE REDIRECT ErrorDocument 400 /error/400.htm ErrorDocument 401 /error/401.htm ErrorDocument 403 /error/403.htm ErrorDocument 404 /error/404.htm ErrorDocument 500 /error/500.htm
-
Протестировать в разных браузерах и на разных компьютерах, чтобы исключить проблемы, связанные с браузером или сеансов.
результат был последовательно во всех испытаний, проект хорошо работает, проект B не работает.
Вопрос
это Потому, что даже форма работает в проекте , но не в проекте B и тестирование с простой формы в обоих доменах неудачу, когда ожидаете, что в проекте сработало?
1 answers
Как руководство PHP надлежащим образом обработать файлы загружать, методы ПОСТ-это с помощью глобальной переменной $_FILES.
// Uma vez que o nome do seu input file é img
$_FILES['img']['tmp_name']
В случае, если в ОП, когда форма содержала только один входной файл, только переменная $_FILES
было подано. Только при включении input hidden или что-то в PHP осуществляется представление данных этой input в переменную $_POST
.
Некоторые другие моменты, которые могут вызвать проблемы (не относящиеся к ситуации, OP, но которые могут помочь другим пользователям):
- форма должна содержать атрибут
enctype="multipart/form-data"
- форма должна содержать атрибут
method="POST"
(илиPUT
, но это мамонт отличается) - Убедитесь, что вы используете двойные кавычки (
"
) в HTML-атрибутов, иногда вы можете не хотеть, чтобы вырезать и вставить смарт-кавычки, кавычки, угловые, etc - Убедитесь, что функция JavasSript не отключив input или form)
- Убедитесь, что ваш input имеет имя (атрибут)
name
). Только ID не является достаточным - Убедитесь, что это имя не принадлежит underscores (
_
) - Убедитесь, что два inputs не имеют то же имя
- Убедитесь, что каталоги, участвующих предоставляется разрешения на чтение и запись
- Убедитесь, что каталоги временных и назначения, предоставляется свободного места на диск
- Убедитесь, что форма, будучи правильно закрыт
</form>
- Проверьте параметры php.ini; в частности,
file_uploads
,post_max_size
иupload_max_file_size
- Проверьте файл
.htaccess
- Убедитесь, что ваш исходный файл не имеет проблемы, для начала разговора, попробуйте загрузки небольших файлов.
Адаптирован этот ответ пользователя shamittomar на Stack Overflow на английский.