一尘不染

获取原始帖子数据

php

根据php手册或php:// input都不能$HTTP_RAW_POST_DATAmultipart/form-dataPOST请求一起使用。

“ php://
input允许您读取原始的POST数据。它是内存占用较少的替代方法,$HTTP_RAW_POST_DATA并且不需要任何特殊的php.ini指令。php://
input不适用于enctype="multipart/form-data"。”

如何获取multipart/form-data表格的原始数据?


阅读 345

收藏
2020-05-26

共1个答案

一尘不染

直接回答:你不能那样做。只要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将为空。

2020-05-26