从PHP读取非键/值POST数据

时间:2014-09-18 07:25:18

标签: php apache http post

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

我尝试从php://inputphp://stdin阅读,但这也是空白。

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

2 个答案:

答案 0 :(得分:1)

根据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开始,还有&#34;启用后数据读取&#34; ini setting(http://php.net/manual/en/ini.core.php#ini.enable-post-data-reading)。

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

尝试停用此设置,然后阅读php://input

答案 1 :(得分:0)

您可以通过以下方式检查并查看帖子中是否存储了任何信息:

print_r( $_POST );

您希望做的是将XML数据发送到名为xml的密钥或类似的密钥中,从而导致$_POST['xml'] = 'your xml code'

修改

如果您可以发布用于创建$_POST的代码,那也很好。