php://inputでmultipart/form-dataを取得する方法
通常の方法では取得できない。
PHPマニュアルに記載の通り、Content-Typeがmultipart/form-dataの場合、php://inputで生データ取得が行えない。
PHP 入出力ストリーム
php://input は、POST の生データの読み込みを 許可します。これは $HTTP_RAW_POST_DATA に比べて メモリ消費量が少なく、特別な php.ini ディレクティブを設定する 必要がありません。php://input は、 enctype="multipart/form-data" に対しては 使用できません。
しかし、Manualを眺めていたところで、「User Contributed Notes」に方法が記載されていた。
RK(21-Aug-2008 08:48)
If you're so inclined to get access to the http request body via php://input when the content-type is multipart/form-data, and you're running apache, this hack may be helpful:
.htaccess
SetEnvIf content-type (multipart/form-data)(.*) NEW_CONTENT_TYPE=multipart/form-data-alternate$2 OLD_CONTENT_TYPE=$1$2 RequestHeader set content-type %{NEW_CONTENT_TYPE}e env=NEW_CONTENT_TYPE
Obviously, this will bypass all of PHP's file handling, as if you had set file_uploads=0, except that the request body wont be discarded. I can't comment on the consequences/pitfalls, since I'm just messing around.
つまるところ、multipart/form-dataというContent-Typeを別のContent-Typeに変えれば取得できるということのようです。
この.htaccessファイルの『RequestHeader』を有効にするには、Apacheの『mod_headers』がロードされている必要があります。(リンク)