[解決済み】PHP "php://input" vs $_POST
質問
という方法を指示されたことがあります。
php://input
の代わりに
$_POST
JQuery からの Ajax リクエストを処理するとき。私が理解していないのは、これを使用する利点と、グローバルメソッドの
$_POST
または
$_GET
.
解決方法は?
その理由は
php://input
は、リクエストの HTTP-header の後に、コンテントタイプに関係なく、すべての生データを返します。
PHP のスーパーグローバルである
$_POST
のみです。
が想定されています。
のどちらかであるデータをラップします。
-
application/x-www-form-urlencoded
(単純なフォーム投稿の標準的なコンテンツタイプ) または -
multipart/form-data
(主にファイルのアップロードに使用されます)
というのも、これらのコンテンツタイプは、唯一 が必要です。 ユーザーエージェントがサポートする . つまり、サーバーと PHP は伝統的に他のコンテンツ・タイプを受け取ることを想定していないのです (受け取れないという意味ではありません)。
ですから、単に古き良きHTMLの
form
の場合、リクエストは次のようになります。
POST /page.php HTTP/1.1
key1=value1&key2=value2&key3=value3
しかし、Ajaxをよく使う場合、型(string, int, bool)や構造体(array, object)を使ったより複雑なデータのやり取りも含まれるので、ほとんどの場合、JSONが最適な選択です。しかし、JSONペイロードを持つリクエストは、次のようになります。
POST /page.php HTTP/1.1
{"key1":"value1","key2":"value2","key3":"value3"}
この場合、コンテンツは次のようになります。
application/json
(あるいは少なくとも上記のどれにも当てはまらない)ので、PHPの
$_POST
-ラッパーはそれをどう扱うか(まだ)知らないのです。
データはまだそこにあり、ラッパーを通してアクセスできないだけです。そのため、自分で生のデータを取得するには
file_get_contents('php://input')
(
でない限りは
multipart/form-data
-エンコード
).
これは、XML-dataやその他の非標準的なコンテンツ・タイプにアクセスする方法でもある。
関連
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み] Forbidden :このサーバーの /phpmyadmin にアクセスする権限がありません。
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] jQueryを使ったAjaxリクエストの中断
-
[解決済み] jQuery Ajax呼び出し後のリダイレクトリクエストを管理する方法
-
[解決済み] どうすればjQueryに非同期ではなく、同期のAjaxリクエストを実行させることができますか?
-
[解決済み] jQuery Ajax ファイルアップロード
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み】PHPによるjQuery Ajax POSTの例
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】phpのob_start()の使い道は?
-
[解決済み] コマンドの同期がとれていない。
-
[解決済み] SAJAXは死んだか?何を置き換えるべきか?
-
[解決済み】未定義の関数mysql_query()をLoginで呼び出す【重複
-
[解決済み】mysqli_select_db()は、パラメータ1がmysqliであることを期待し、文字列が与えられる。
-
[解決済み】In_arrayが動作しない。
-
[解決済み】警告: file_get_contents(): https:// ラッパーがサーバー構成ですべて無効になっています。
-
[解決済み] PHPの配列を別の配列にコピーする関数はありますか?
-
[解決済み] mysql_field_nameを新しいmysqliに変更します。
-
[解決済み] $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて