2011-12-23 3 views
0

Я пытаюсь отправить файл в многостраничном сообщении. Проблема в том, что мне нужно передать два дополнительных параметра с этим файлом. И я хочу, чтобы они были доступны в массиве параметров POST. Вопрос в том, можно ли добавить часть к многостраничному сообщению, чтобы он интерпретировался как параметр POST? Или я трачу время?Многостраничные сообщения и параметры POST на стороне сервера

Я хочу, например:

--1BEF0A57BE110FD467A\r\n 
Content-Disposition: form-data; name="name1"\r\n 
\r\n 
value\r\n 

быть accsessible с $_POST['name1']

PS: насколько я знаю, если один загрузки файла с помощью ActionScript FileReference.upload(urlRequest) и определяет пост Params в urlRequest, то они» ll be in $_POST

ответ

3

Что вы хотите сделать на самом деле именно так, как многопользовательские сообщения работают по отношению к $_POST массив.

Рассмотрим следующую форму HTML:

<form action="/somefile.php" method="post" enctype="multipart/form-data"> 
    <input name="text1" type="text" /> 
    <input name="text2" type="text" /> 
    <input name="text3" type="text" /> 
    <input name="file" type="file" /> 
    <input type="submit" /> 
</form> 

Теперь позволяет сказать, что мы заполнить три текстовых входов с value1, value2 и value3, мы выбираем файл с именем file.txt и нажмите кнопку. Это приведет к запросу, который выглядит примерно так:

POST /somefile.php HTTP/1.1 
Host: somehost.com 
Accept: */* 
User-Agent: MyBrowser/1.0 
Content-Type: multipart/form-data; boundary="this-is-a-boundary-string" 

--this-is-a-boundary-string 
Content-Dispostion: form-data; name="text1" 

value1 
--this-is-a-boundary-string 
Content-Dispostion: form-data; name="text2" 

value2 
--this-is-a-boundary-string 
Content-Dispostion: form-data; name="text3" 

value3 
--this-is-a-boundary-string 
Content-Dispostion: form-data; name="file"; filename="file.txt" 
Content-Type: text/plain 

This is the contents of file.txt 
--this-is-a-boundary-string-- 

Когда мы смотрим на это в PHP, если мы print_r($_POST); мы должны получить что-то вроде этого:

Array 
(
    [text1] => value1 
    [text2] => value2 
    [text3] => value3 
) 

... и если мы print_r($_FILES);:

Array 
(
    [file] => Array 
    (
     [name] => file.txt 
     [type] => text/plain 
     [size] => 32 
     [tmp_name] => /tmp/dskhfwe43232.tmp 
     [error] => 0 
    ) 
) 

... так что вы можете увидеть, части сообщения, в котором заголовок Content-Disposition: не содержат filename="" элемент добавляют к $_POST, а те, у кого один, рассматриваются как загрузка файлов и добавляются в $_FILES.

При создании сообщения multipart/form-data для отправки на сервер, я считаю, что проще всего создать форму HTML, которую вы имитируете с запросом, и построить свое HTTP-сообщение на основе того, как будет выглядеть эта форма HTML.

Смежные вопросы