Respuesta directa: no se puede hacer eso. PHP insiste en analizarlo él mismo, siempre que vea el tipo de contenido multipart/form-data. Los datos brutos no estarán disponibles para usted. Tristemente. Pero puedes hackearlo.
Me tocó un problema similar, un socio estaba enviando datos formateados incorrectamente como multiparte/form-data, PHP no pudo analizarlo y no lo estaba distribuyendo para que yo pudiera analizarlo.
¿La solución? He añadido esto a mi configuración del Apache:
<Location "/backend/XXX.php">
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
</Location>
Esto cambiará el tipo de contenido de la solicitud entrante a XXX.php de multipart/form-data en multipart/form-data-alternativo, lo cual es suficiente para bloquear PHP de intentar analizarlo
Después de esto, finalmente puede leer toda la información sin procesar de la entrada php: // y analizarla usted mismo.
Es feo, pero no he encontrado una solución mejor o, de hecho, ninguna otra, sin pedirle al socio que la corrija.
¡NOTA! Cuando hagas lo que describí aquí, $ _FILES estará vacío.
Si es por el bien de contar bytes, no se puede combinar el recuento de $ HTTP_RAW_POST_DATA bytes con el número de bytes de cualquier $ _FILES? – karim79
@ karim79, porque no lo es. – Pacerier