file_get_contents( 'php:// input')を使用するphpと$ _POSTの違い

この記事の目的:

httpリクエストパケットを受信するときにサードパーティのプラットフォームとインターフェイスするときに、通常$ _POSTの代わりにfile_get_contents( "php:// input")を使用するのはなぜですか?

file_get_contents:ファイル全体を文字列に読み込みます

phpでインターフェースを作成する場合、リクエストされたデータは通常、jsonの形式で指定されたリクエストアドレスに送信されます。このとき、file_get_contents( 'php:// input')は、主にリクエストの元のデータを取得するために使用されます。$ HTTP_RAW_POST_DATAと比較して、php:// inputはメモリへの負荷が少なく、特別なphp.ini設定を必要としません。

2つの点に注意してください:

  1. データの送信方法はPOSTである必要があります
  2. php:// inputを使用して、enctype = "multipart / form-data"によって送信されたデータを受信することはできません。

1.簡単な例を挙げてください。

  • フォームを送信する
<form action="" method="POST">
    姓名: <input type="text" name="name" value="tom" /><br />
    年龄:<input type="text" name="age" value="22" /><br />
    <input type="submit" value="Submit" />
</form>
  • バックエンドコントローラーは、file_get_contents( 'php:// input')を介してリクエストの元のデータストリームを取得します。
<?php
$content = file_get_contents('php://input', 'r'); 
echo $content; 
//输出name=tom&age=22
?>

2.プロジェクトアプリケーションでは、カメラで写真を撮ったり、アップロードしたり、保存したりするなど、php:// inputを使用できます。クライアントが写真を撮った後、画像ストリームがサーバーに送信され、サーバーはfile_get_getcontents( 'php:// input')を使用して画像ストリームを取得できます。

$ _POST

$ _POSTは、Content-Typeによって送信されたデータのみを受信できます:application / x-www-form-urlencoded、PHPはhttpリクエスト本文の対応するデータを配列_POSTに入力し、_POST配列のデータはurldecode( )結果。Content-Typeに加えて、multipart / form-dataタイプのフォームデータも$ _POSTで受信できます。

データを送信する4つの一般的な方法は次のとおりです。

定義と使用法

enctype属性が指定する方法フォームデータがなければならないことが、符号化する前にされているサーバーに送信されましたデフォルトでは、フォームデータは「application / x-www-form-urlencoded」としてエンコードされます。つまり、サーバーに送信する前に、すべての文字がエンコードされます(スペースは「+」プラス記号に変換され、特殊記号はASCII HEX値に変換されます)。

enctype属性値

コンテンツタイプの値 説明
application / x-www-form-urlencoded 送信する前にすべての文字をエンコードします(デフォルト)
マルチパート/フォームデータ

文字はエンコードされていません。

この値は、ファイルアップロードコントロールを含むフォームを使用する場合に使用する必要があります。

テキスト/プレーン スペースは「+」プラス記号に変換されますが、特殊文字はエンコードされません。

text / xml

トランスポートプロトコルとしてHTTPを使用し、エンコード方法としてXMLを使用するリモート呼び出し仕様。

総括する:

1.Coentent-Typeの値がapplication / x-www-data-urlencodedおよびmultipart / form-dataの場合にのみ、PHPはhttpリクエストパケット内の対応するデータをグローバル変数$ _POSTに入力します。

2. Content-TypeタイプがPHPによって認識されない場合、http要求パケット内の対応するデータが変数$ HTTP_RAW_POST_DATAに入力されます。

3.Coentent-Typeがmultipart / form-dataの場合のみ、PHPはhttpリクエストパケットの対応するデータをphp:// inputに入力しません。それ以外の場合は、他の状況になります。記入する長さはCoentent-Lengthで指定します。

4.Content-Typeがapplication / x-www-data-urlencodedの場合のみ、php:// inputデータは$ _POSTデータと一致します。

5.取得できない場合、たとえば、Coentent-Typeがtext / xml、application / json、soapの場合、file_get_contents( 'php:// input');を使用してください。

 

 

おすすめ

転載: blog.csdn.net/qq15577969/article/details/113934324