从PHP读取非键/值POST数据


Reading non key/value POST data from PHP

我有一个系统,它将数据发布到URL,而不发送键/值对,而是使用XML负载。我需要在Apache下使用PHP读取XML数据,但PHP的$_POST数组用于键/值对,因此为空,因为没有提供键。

我试着阅读php://inputphp://stdin,但那也是空白的。

如何使用PHP读取原始POST数据?我无法控制输入,因为它是由第三方应用程序生成的。想象一下,这是一个接受XML负载的RESTful URL。

根据PHP手册php://input is not available with enctype="multipart/form-data".。如果这是张贴给您的内容,PHP将不允许您访问原始数据。此问题的一个解决方法:
来源:https://stackoverflow.com/questions/1361673/get-raw-post-data

将此添加到您的apache.conf:

<Location "/backend/XXX.php">
        SetEnvIf Content-Type ^(multipart/form-data)(.*) MULTIPART_CTYPE=$1$2
        RequestHeader set Content-Type application/x-httpd-php env=MULTIPART_CTYPE
        RequestHeader set X-Real-Content-Type %{MULTIPART_CTYPE}e env=MULTIPART_CTYPE
</Location>

从PHP 5.4开始,还有"启用后期数据读取"ini设置(http://php.net/manual/en/ini.core.php#ini.enable-后数据读取)。

从PHP手册:"禁用此选项会导致$_POST和$_FILES不被填充。读取postdata的唯一方法是通过php://input流包装器。这对于代理请求或以高效内存的方式处理POST数据非常有用。"

请尝试禁用此设置,然后从php://input读取。

您可以通过执行以下操作来检查帖子中是否存储了任何信息:

print_r( $_POST );

您想要做的可能是在名为xml的密钥中发送XML数据,或者类似于$_POST['xml'] = 'your xml code' 的密钥

编辑:

如果你能发布你用来创建$_POST的代码,那也太好了。