我有一个系统,它将数据发布到URL,而不发送键/值对,而是使用XML负载。我需要在Apache下使用PHP读取XML数据,但PHP的$_POST
数组用于键/值对,因此为空,因为没有提供键。
我试着阅读php://input
和php://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
的代码,那也太好了。