Сравните различия между методами отправки формы POST и fsockopen.
Когда форма отправляется в режиме POST,
$_POST и php://input могут получить значение, а $HTTP_RAW_POST_DATA пуст.
$_POST организует отправленные данные в ассоциативный массив и выполняет обработку кодирования, например urldecode, и даже преобразование кодировки.
php://input может получать необработанные необработанные данные POST, читая файлы через входной поток.
php://input позволяет читать необработанные данные POST. Он оказывает меньшую нагрузку на память, чем $HTTP_RAW_POST_DATA, и не требует каких-либо специальных настроек php.ini. php://input нельзя использовать с enctype="multipart/form-data".
Пример отправки данных POST командой fsockopen:
$sock = fsockopen("localhost", 80, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno)n");
$data = "txt=" . urlencode("中") . "&bar=" . urlencode("Значение для бара");
fwrite($sock, "POST /posttest/response.php HTTP/1.0rn");
fwrite($sock, "Хост: localhostrn");
fwrite($sock, "Тип контента: application/x-www-form-urlencodedrn");
fwrite($sock, "Длина контента: " . strlen($data) . "rn");
fwrite($sock, "Принять: */*rn");
fwrite($sock, "rn");
fwrite($sock, "$datarn");
fwrite($sock, "rn");
$headers = "";
while ($str = Trim(fgets($sock, 4096)))
$headers .= "$strn";
эхо "n";
$body = "";
пока (!feof($sock))
$body .= fgets($sock, 4096);
fclose ($ носок);
echo $body
соответствует результату (1)
:
1. Используйте ввод php://, чтобы легко получить исходные данные POST.
2. $HTTP_RAW_POST_DATA действителен только в том случае, если тип Content-Type POST не распознается PHP.
Например, данные POST, обычно отправляемые через формы страницы, не могут быть переданы. через $HTTP_RAW_POST_DATA извлекается. Его атрибут типа кодирования (атрибут enctype) — application/x-www-form-urlencoded, multipart/form-data.
Примечание. Даже если вы явно измените атрибут enctype на странице на тип, который не распознается PHP, он все равно будет недействителен.
Поскольку атрибут кодировки отправки формы ограничен формой, нераспознаваемые типы будут считаться отправленными в кодировке по умолчанию (т. е. application/x-www-form-urlencoded).
3. $_POST только тогда, когда данные находятся в application/x-www. -form-urlencoded Тип можно получить только при отправке.