Я пытаюсь собрать 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
Точно точный ввод одновременно.
$_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