我有一个系统可以将数据发送到URL而不发送键/值对,而是使用XML有效负载。我需要在Apache下使用PHP读取XML数据,但PHP的$_POST
数组用于键/值对,因此没有提供密钥,因此是空白的。
我尝试从php://input
和php://stdin
阅读,但这也是空白。
如何使用PHP读取原始POST数据?我无法控制输入,因为它是由第三方应用程序生成的。想象一下,这是一个接受XML有效负载的RESTful URL。
答案 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
的代码,那也很好。