根据php手册或php:// input都不能$HTTP_RAW_POST_DATA与multipart/form-dataPOST请求一起使用。
$HTTP_RAW_POST_DATA
multipart/form-data
“ php:// input允许您读取原始的POST数据。它是内存占用较少的替代方法,$HTTP_RAW_POST_DATA并且不需要任何特殊的php.ini指令。php:// input不适用于enctype="multipart/form-data"。”
enctype="multipart/form-data"
如何获取multipart/form-data表格的原始数据?
直接回答:你不能那样做。只要PHP看到multipart / form-data Content- Type,它就会坚持对其本身进行解析。原始数据将对您不可用。可悲的是。但是您可以解决它。
我遇到了类似的问题,一个合作伙伴正在将格式错误的数据作为多部分/表单数据发送,PHP无法对其进行解析并且没有给出它,因此我可以自己对其进行解析。
解决方案?我将此添加到我的apache conf中:
<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>
这会将传入请求的Content-Type从multipart / form-data更改为multipart / form-data- alternate,这足以阻止PHP尝试解析它。
之后,您最终可以从php:// input读取全部原始数据并自己解析。
这很丑陋,但我没有找到更好的解决方案或实际上没有其他解决方案-只是要求合作伙伴固定立场。
注意!当您执行我在此处描述的操作时,$ _ FILES将为空。