В чем разница между POST и raw POST в PHP вообще?
У меня этот вопрос после прочтения ответа здесь какая разница вообще?
можно ли отправить необработанный пост с помощью html ?
4 ответов
мы можем разделить формы представления в трех случаях:
- представления с типом контента
application/x-www-form-urlencoded
- представления с типом контента
multipart/form-data
- другие материалы.
в случаях 1 и 3 $HTTP_RAW_POST_DATA
содержит необработанные данные post (за исключением, если опция 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, вы можете опубликовать все, что вам нравится с AJAX. Что-то вроде этого:--6-->
var req = new XMLHttpRequest();
req.open('POST', 'http://www.example.com/my_url' true);
req.send('any data you want');
позволит вам размещать произвольные вещи на веб-сервере.
$_POST-ассоциативный массив входящих параметров POST. PHP создает это для вас из raw HTTP post. Если вы хотите иметь дело с необработанными данными 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.