質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

6950閲覧

PHP $HTTP_RAW_POST_DATA が非推奨となった理由について

ykws

総合スコア1236

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2017/09/21 14:45

PHP 7.0 では削除されたので検討の余地もないことかもしれませんが、
file_get_contents が利用できないサーバ環境で POST リクエストの生データを扱いたいときに、
仮に PHP 5.6 の環境であれば、すでに非推奨ではあるが、まだ削除されていないため、
利用する上での危険性について知りたくて質問しています。

公式のマニュアルを当たると、 php://input の利用を推奨され、理由について記述は見当たりませんでした。

$HTTP_RAW_POST_DATA の代わりに、 php://input を使うべきです。

PHP: $HTTP_RAW_POST_DATA

ディレクティブの説明にある未設定だとアクセス不可の可能性があるため、というのが有力でしょうか。

TRUE に設定すると、PHP は常に $HTTP_RAW_POST_DATA にアクセス可能とします。 この変数には生の POST データが格納されています。 指定しなかった場合は、 データの MIME 型が判別できない場合のみこの変数にアクセス可能となります。

PHP: always_populate_raw_post_data

ディレクティブの設定に依存しないが理由と考えて良いのでしょうか?
メモリの消費量も理由と思えそうなのですが、後者の $HTTP_RAW_POST_DATAphp://input
typo と読み替えて妥当でしょうか?
であれば、より説得力があるかなと腑に落ちます。

POST リクエストの場合は $HTTP_RAW_POST_DATA よりも php://input を使うのが望ましいでしょう。php.ini ディレクティブの設定に依存しないからです。
さらに、$HTTP_RAW_POST_DATA がデフォルトで設定されない場合は、 always_populate_raw_post_data を有効にするよりも $HTTP_RAW_POST_DATA を使うほうがメモリの消費量が少なくなるでしょう。

PHP: php://input

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

$HTTP_RAW_POST_DATAの廃止理由はメモリ使用量の削減が目的である、のだと思います。
あまりアクセス性についての議論はされていないように見えました。

PHP RFC: Slim POST data
https://wiki.php.net/rfc/slim_post_data

ですので危険性という点からは想定以上のメモリ消費が発生することにより性能劣化等の可能性がある、ということになるでしょうか。

php://inputの説明についてですが、英文での説明を確認したところでは、自信はないですが
it は "$HTTP_RAW_POST_DATAが設定されなかった場合" を指しているように見えます。
「always_populate_raw_post_data を有効にするよりも $HTTP_RAW_POST_DATA を使うほうが」は「always_populate_raw_post_data を有効にして $HTTP_RAW_POST_DATA を使うよりも」と読んだ方がよいかもしれません。

php://input is a read-only stream that allows you to read raw data from the request body.
php://input は読み込み専用のストリームで、 リクエストの body 部から生のデータを読み込むことができます。

In the case of POST requests, it is preferable to use php://input instead of $HTTP_RAW_POST_DATA as it does not depend on special php.ini directives.
POST リクエストの場合は $HTTP_RAW_POST_DATA よりも php://input を使うのが望ましいでしょう。php.ini ディレクティブの設定に依存しないからです。

Moreover, for those cases where $HTTP_RAW_POST_DATA is not populated by default, it is a potentially less memory intensive alternative to activating always_populate_raw_post_data.
さらに、$HTTP_RAW_POST_DATA がデフォルトで設定されない場合は、 always_populate_raw_post_data を有効にするよりも $HTTP_RAW_POST_DATA を使うほうがメモリの消費量が少なくなるでしょう。

php://input is not available with enctype="multipart/form-data".
php://input は、 enctype="multipart/form-data" に対しては使用できません。

投稿2017/09/21 15:34

編集2017/09/21 22:53
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ykws

2017/09/22 01:30

ありがとうございます。 英文の it はそう解釈するのが正しそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問