フォーム POST と fsockopen 送信メソッドの違いを比較してください。 フォームがPOSTで送信された場合 $_POST と php://input は値を取得できますが、$HTTP_RAW_POST_DATA は空です php://input を使用すると、POST の生データを読み取ることができます。 $HTTP_RAW_POST_DATA よりもメモリへの負担が少なく、特別な php.ini 設定は必要ありません。 php://input は enctype="multipart/form-data" では使用できません。 fsockopenはPOSTデータを送信します $sock = fsockopen("localhost", 80, $errno, $errstr, 30); 結果(1)と一致 結論: 2. $HTTP_RAW_POST_DATA は、POST の Content-Type タイプが PHP によって認識されない場合にのみ有効です 通常ページフォームを通じて送信される POST データは、$HTTP_RAW_POST_DATA を通じて抽出することはできません。そのエンコーディング タイプ属性 (enctype 属性) は application/x-www-form-urlencoded、multipart/form-data です。 注: ページ内の enctype 属性を PHP で認識されない型に明示的に変更した場合でも、無効のままです。 3. $_POST は、application/x-www-form-urlencoded タイプでデータが送信された場合にのみ取得できます。
$_POST は送信されたデータを連想配列に整理し、urldecode などのエンコード処理、さらにはエンコード変換を実行します。
php://input は、入力ストリームを介したファイル読み取りを通じて未処理の POST 生データを取得できます
例:
if (!$sock) die("$errstr ($errno)
");
$data = "txt=" . urlencode("中") . "&bar=" . urlencode("バーの値");
fwrite($sock, "POST /posttest/response.php HTTP/1.0
");
fwrite($sock, "ホスト: localhost
");
fwrite($sock, "コンテンツタイプ: application/x-www-form-urlencoded
");
fwrite($sock, "コンテンツの長さ: " . strlen($data) . "
");
fwrite($sock, "受け入れる: */*
");
fwrite($sock, "
");
fwrite($sock, "$data
");
fwrite($sock, "
");
$headers = "";
while ($str = トリム(fgets($sock, 4096)))
$headers .= "$str
「;
エコー」
";
$body = "";
while (!feof($sock))
$body .= fgets($sock, 4096);
fclose($sock);
echo $body;
1. php://input を使用して元の POST データを簡単に取得します
フォーム送信のエンコード属性はフォームに制限されているため、認識できないタイプはデフォルトのエンコード方法 (つまり、application/x-www-form-urlencoded) で送信されたものとみなされます