PHP – синтаксический анализ данных многочастной формы

Я пытаюсь собрать HTML-версию POST-ed, которая имеет два поля: загрузку файлов и текстовое поле. Поскольку форма имеет тип multipart / form-data для загрузки файла, я не могу получить текстовое поле через обычную переменную PHP $ _POST. Итак, как я могу получить текстовое поле в форме с PHP?

В соответствии с запросом, вот какой-то код, в основном взятый непосредственно от Эндрю:

<html> <body> <form action="test2.php" method="post" enctype="multipart/form-data"> Name: <input type="text" name="imageName" /> Image: <input type="file" name="image" /> <input type="submit" value="submit" /> </form> </body> </html> <?php echo $_POST['imageName']; echo "<pre>"; echo var_dump($_FILES['image']); echo "</pre>"; ?> 

Это весь тестовый файл. Если я удалю enctype, я могу получить данные POST-ed, но не файл, конечно. С enctype как multipart / form-data я могу получить файл, но ничего из данных POST-ed.

Вот результат с enctype:

 array(5) { ["name"]=> string(34) "testing.png" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(1) ["size"]=> int(0) } 

Без:

 testing NULL 

Точно точный ввод одновременно.

Solutions Collecting From Web of "PHP – синтаксический анализ данных многочастной формы"

$_FILES файлов происходит через $_FILES . Все остальное приходит через $_POST (если, конечно, ваша HTML-форма имеет атрибут method установленный на "post" ).

Проверьте свой лимит сообщений. Я сошел с ума, пытаясь понять, что это вызывает. Быстрая проверка в журнале ошибок Apache показала, что длина содержимого сообщения превысила лимит. После повышения лимита доступны почтовые данные.

$_POST должен отлично работать для текстового поля. Вам нужно будет использовать $_FILES для фактического файла. Учитывая следующий HTML:

 <html> <body> <form action="self.php" method="post" enctype="multipart/form-data"> Name: <input type="text" name="imageName" /> Image: <input type="file" name="image" /> <input type="submit" value="Submit" /> </form> </body> </html> 

Вы можете получить доступ к полям следующим образом:

 <?php echo $_POST['imageName']; echo "<pre>"; echo var_dump($_FILES['image']); echo "</pre>"; ?> 

В коде нет ничего плохого; может быть проблемой при конфигурации сервера.

 <form action="" method="post" enctype="multipart/form-data"> Name: <input type="text" name="imageName"> Image: <input type="file" name="image"> <input type="submit" value="submit"> </form> <?php var_dump($_POST, $_FILES); ?> 

Сценарий: http://sandbox.phpieceofcake.com/upload/1246558881125336.php
Источник: http://sandbox.phpieceofcake.com/upload/1246558881125336.phps

У меня была та же проблема, что и в начале. Попробуйте, загрузив размер файла менее 1 МБ, если вы смогли загрузить файл, то ваша проблема – значения upload_max_filesize и post_max_size, увеличивающие эти значения и повторите попытку. Это было решением моей проблемы.

[2010-02-13 10:57 UTC] sudeshkmr at yahoo dot com

Я столкнулся с той же проблемой, и ничего не получилось. Я тестировал Apache 2.2, PHP 5.3 в Windows Vista. Я также тестировал Ubuntu (Karmic) с Apache 2.2 и PHP 5.3. Я также тестировал с nGinX 0.8 и PHP 5.3.

Затем я нашел обходное решение. Параметр action = "" не должен быть самой страницей сценария, на которой у вас есть форма загрузки файла. Например, у вас есть страница index.php с формой загрузки.

Действие = "upload.php" <——– Эта страница должна отличаться от страницы формы загрузки файла, и она работает во всех конфигурациях PHP!

Не используйте для параметра действия.

Вы можете проверить, работают ли ваши веб-сервисы с использованием клиентского расширения chrome rest или загружают данные из нескольких частей через это приложение – http://itunes.apple.com/us/app/rest-client/id503860664?ls=1&mt=8