У меня есть этот вопрос после чтения ответа здесь, каково различие вообще?
Действительно ли возможно отправить необработанное сообщение с HTML?
Мы можем разделить отправку формы в трех случаях:
application / x-www-form-urlencoded
multipart / form-data
В случаях 1 и 3 $ HTTP_RAW_POST_DATA
содержит необработанные данные сообщения (кроме случая, когда для параметра always_populate_raw_post_data
установлено значение false
, в этом случае $ HTTP_RAW_POST_DATA
пусто в случае 1), т. Е. Данные точно в том виде, в каком их отправил клиент (обычно браузер). В случае 1 данные имеют форму, такую как
key1=value1&key2=value2&key3[]=value3.1&key3[]=value3.2
PHP автоматически анализирует это, так что $ _ POST
становится:
$_POST = array(
"key1" => "value1",
"key2" => "value2",
"key3" => array("value3.1", "value3.2");
)
К содержимому необработанных данных также можно получить доступ через php : // input
, даже в случае 1, когда для always_populate_raw_post_data
установлено значение false
. В частности, file_get_contents ("php: // input")
дает те же данные $ HTTP_RAW_POST_DATA
, которые есть или будут иметь.
В случае 3, в котором данные POST произвольны, $ _ POST
будет пустым массивом, а $ HTTP_RAW_POST_DATA
всегда будет заполнен.
Случай 2 - особый. В этом случае PHP проанализирует данные и $ _ POST
получит содержимое полей, которые не являются загруженными файлами, а php: // input
и $ HTTP_RAW_POST_DATA
будет недоступен.
$ HTTP_RAW_POST_DATA
будет содержать что-то вроде:
beans=cheese&spam=eggs&one=two
PHP разделяет это за вас и помещает в массив $ _ POST
. Наивно, он делает что-то вроде этого:
$parts = explode('&', $HTTP_RAW_POST_DATA);
foreach ( $parts as $part ) {
list($key, $value) = explode('=', $part, 2);
$_POST[$key] = $value;
}
Используя JavaScript, который может быть встроен в HTML, вы можете POST все, что захотите, с помощью AJAX . Примерно так:
var req = new XMLHttpRequest();
req.open('POST', 'http://www.example.com/my_url' true);
req.send('any data you want');
позволит вам отправлять произвольные вещи на веб-сервер.
$ _ POST - это ассоциативный массив входящих параметров POST. PHP создает это для вас из необработанного HTTP-сообщения. Если вы хотите самостоятельно обрабатывать необработанные данные POST (у вас могут быть двоичные данные, отправленные в POST), используйте $ HTTP_RAW_POST_DATA.
_POST
предполагает, что это значения формы application / x-www-form-urlencoded
или multipart / form-data
. HTTP_RAW_POST_DATA
, если он заполнен, является необработанной строкой. Вы также можете получить к нему доступ с помощью psuedo-url php: // input
. Вы можете отправлять произвольные данные POST (например, XML, JSON, HTML) с помощью AJAX.