- Формы с полем типа "файл" поступает на сервер с "$ 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

  • Проекта

    Captura Tela - Cabeçalhos

    Captura Tela - Post

    Captura Tela - Post Source

  • Проекта B

    Captura Tela - Cabeçalhos

    Captura Tela - Post

    Captura Tela - Post Source


Уже провел серию тестов, таким образом, понять, что может быть пройти, некоторые из которых могут быть уместны, чтобы найти решение для этой проблемы:

  1. Файл PHP с не более, чем формы, в верхней отображается.

    проекта B o var_dump($_POST); дает мне пустой массив.

  2. Добавить дополнительное поле типа hidden и типа text в форме проекта B решает проблему, а массив $_POST случается поступает на сервер в условия.

  3. Скопировать PHP-файл проекта проекта B для проверки каких-либо проблем с файлом себя (???), но результат тот же.

  4. Проверка файлов .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
    
  5. Протестировать в разных браузерах и на разных компьютерах, чтобы исключить проблемы, связанные с браузером или сеансов.

    результат был последовательно во всех испытаний, проект хорошо работает, проект B не работает.


Вопрос

это Потому, что даже форма работает в проекте , но не в проекте B и тестирование с простой формы в обоих доменах неудачу, когда ожидаете, что в проекте сработало?

Author: Zuul, 2014-01-09

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, но которые могут помочь другим пользователям):

  1. форма должна содержать атрибут enctype="multipart/form-data"
  2. форма должна содержать атрибут method="POST" (или PUT, но это мамонт отличается)
  3. Убедитесь, что вы используете двойные кавычки (") в HTML-атрибутов, иногда вы можете не хотеть, чтобы вырезать и вставить смарт-кавычки, кавычки, угловые, etc
  4. Убедитесь, что функция JavasSript не отключив input или form)
  5. Убедитесь, что ваш input имеет имя (атрибут) name). Только ID не является достаточным
  6. Убедитесь, что это имя не принадлежит underscores (_)
  7. Убедитесь, что два inputs не имеют то же имя
  8. Убедитесь, что каталоги, участвующих предоставляется разрешения на чтение и запись
  9. Убедитесь, что каталоги временных и назначения, предоставляется свободного места на диск
  10. Убедитесь, что форма, будучи правильно закрыт </form>
  11. Проверьте параметры php.ini; в частности,file_uploads, post_max_size и upload_max_file_size
  12. Проверьте файл .htaccess
  13. Убедитесь, что ваш исходный файл не имеет проблемы, для начала разговора, попробуйте загрузки небольших файлов.

Адаптирован этот ответ пользователя shamittomar на Stack Overflow на английский.

 5
Author: Anthony Accioly, 2017-05-23 12:37:30