Что вы хотите сделать на самом деле именно так, как многопользовательские сообщения работают по отношению к $_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.