ホームページ  >  記事  >  バックエンド開発  >  PHP POST メソッド_PHP チュートリアル

PHP POST メソッド_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:35:171270ブラウズ

フォーム 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" では使用できません。

fsockopenはPOSTデータを送信します
例:

$sock = fsockopen("localhost", 80, $errno, $errstr, 30);
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)と一致

結論:
1. php://input を使用して元の POST データを簡単に取得します

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 で認識されない型に明示的に変更した場合でも、無効のままです。
フォーム送信のエンコード属性はフォームに制限されているため、認識できないタイプはデフォルトのエンコード方法 (つまり、application/x-www-form-urlencoded) で送信されたものとみなされます

3. $_POST は、application/x-www-form-urlencoded タイプでデータが送信された場合にのみ取得できます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/508353.html技術記事フォーム POST と fsockopen の送信メソッドの違いを比較してください。 フォームが POST モードで送信されると、$_POST と php://input は値を取得できます。$HTTP_RAW_POST_DATA は空で、$_POST は関連付けられた番号を使用します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。