猿问

获取原始帖子数据

获取原始帖子数据

根据php手册也没有php://输入也不能$HTTP_RAW_POST_DATA用于multipart/form-dataPOST请求。

“php:// input允许你读取原始POST数据。它是一种内存密集程度较低的替代品,$HTTP_RAW_POST_DATA不需要任何特殊的php.ini指令.php://输入不可用enctype="multipart/form-data"。”

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


红糖糍粑
浏览 358回答 3
3回答

泛舟湖上清波郎朗

直接回答:你做不到。只要PHP看到multipart / form-data Content-Type,它就会坚持自己解析它。原始数据将无法使用。可悲的是。但你可以破解它。我遇到了类似的问题,合作伙伴发送格式错误的数据作为multipart / form-data,PHP无法解析它并且没有发布它所以我可以自己解析它。解决方案?我把它添加到我的apache conf:<Location&nbsp;"/backend/XXX.php"> &nbsp;&nbsp;&nbsp;&nbsp;SetEnvIf&nbsp;Content-Type&nbsp;^(multipart/form-data)(.*)&nbsp;NEW_CONTENT_TYPE=multipart/form-data-alternate$2&nbsp;OLD_CONTENT_TYPE=$1$2 &nbsp;&nbsp;&nbsp;&nbsp;RequestHeader&nbsp;set&nbsp;Content-Type&nbsp;%{NEW_CONTENT_TYPE}e&nbsp;env=NEW_CONTENT_TYPE</Location>这会将传入请求的Content-Type从multipart / form-data更改为XXX.php到multipart / form-data-alternate,这足以阻止PHP尝试解析它在此之后,您最终可以从php://输入读取整个原始数据并自行解析。这很丑陋,但我没有找到更好的或事实上任何其他解决方案 - 没有要求合作伙伴来解决他们的问题。NB!当你按照我在这里描述的那样做时,$ _FILES将为空。

收到一只叮咚

您可以设置enable_post_data_reading = Off并且PHP不会拦截multipart/form-data数据。要求:PHP 5.4

喵喵时光机

我没有完全实现它,但它看起来应该工作。在Apache conf:SetEnvIf&nbsp;Content-Type&nbsp;^(multipart/form-data)(.*)&nbsp;MULTIPART_CTYPE=$1$2RequestHeader&nbsp;set&nbsp;Content-Type&nbsp;application/x-httpd-php&nbsp;env=MULTIPART_CTYPERequestHeader&nbsp;set&nbsp;X-Real-Content-Type&nbsp;%{MULTIPART_CTYPE}e&nbsp;env=MULTIPART_CTYPE设置Content-Typeto&nbsp;application/x-httpd-php似乎解决了PHP解析主体的原始问题,而Norbert Farkas报告的问题是:“Apache发回PHP源代码”。然后可以使用正文php://input,并在X-Real-Content-Type标题中输入实际内容类型。(那个标题对你来说可能不是必需的 -&nbsp;MULTIPART_CTYPE变量似乎没有显示在我的中$_ENV,但新的标题确实出现了。)所有其他请求应该像往常一样处理。
随时随地看视频慕课网APP
我要回答