PUTリクエスト時のPHPのfile_get_contents('php://input') のバグ?仕様?
簡単に言うとPUTされたコンテンツが読みだすと消滅する問題
POSTや、PUTでHTTPのリクエストを送った際、ペイロードとして$_POSTでは扱えないひとつながりの文字列を送る場合がある。
その際、$_POSTでは取得できないため、file_get_contents('php://input') を使って取得するのが通例になっている。
しかし、どうやらHTTP的にPOSTした場合と、PUTした場合で挙動に違いがあるようだ。
具体的にはPOSTした場合、file_get_contents('php://input') を使って複数回取得しても値は消えないが、PUTの場合1回だけしか取得できないバグ? 仕様?があることが分かった。
ちなみに発生した環境は
PHPのバージョンは PHP 5.3.6
ApacheのバージョンはApache/2.2.19
また、POSTやPUTする時にはfile_get_contentsを使ってストリームコンテキストでメソッドのみを切り替えた感じ・・・
ちなみにDELETE時については未検証
追記:
ツイッター方面&ブクマからの情報によると↓のとおり「仕様」らしい
http://php.net/manual/ja/wrappers.php.php
情報を寄せてくれた方ありがとうございます・・・
しかし、だとしたらなんでPOSTだけ特別扱いなんだろう・・・??