Ответ 1
Загрузка файлов происходит через $_FILES
. Все остальное приходит через $_POST
(если, конечно, ваша HTML-форма имеет свой атрибут method
, установленный на "post"
).
Я пытаюсь собрать 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
. Все остальное приходит через $_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); ?>
Script: 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 = "" не должен быть самой страницей script, на которой у вас есть форма загрузки файла. Например, у вас есть страница index.php с формой загрузки.
Действие = "upload.php" < -------- Эта страница должна отличаться от страницы формы загрузки файла, и она работает во всех конфигурациях PHP!
Не используйте для параметра действия.
Вы можете проверить, работают ли ваши веб-службы с помощью расширения клиентского пространства Chrome или загружают данные из нескольких частей через это приложение - http://itunes.apple.com/us/app/rest-client/id503860664?ls=1&mt=8