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』がロードされている必要があります。(リンク