从PHP读取非键/值POST数据
我有一个系统,它将数据发布到URL,而不发送键/值对,而是使用XML负载。我需要在Apache下使用PHP读取XML数据,但是PHP的从PHP读取非键/值POST数据,php,apache,http,post,Php,Apache,Http,Post,我有一个系统,它将数据发布到URL,而不发送键/值对,而是使用XML负载。我需要在Apache下使用PHP读取XML数据,但是PHP的$\u POST数组用于键/值对,因此是空的,因为没有提供键 我试着从php://input和php://stdin,但这也是空白 如何使用PHP读取原始POST数据?我无法控制输入,因为它是由第三方应用程序生成的。假设这是一个接受XML有效负载的RESTful URL。您可以通过执行以下操作检查并查看您的帖子中是否存储了任何信息: print_r( $_POST
$\u POST
数组用于键/值对,因此是空的,因为没有提供键
我试着从php://input
和php://stdin
,但这也是空白
如何使用PHP读取原始POST数据?我无法控制输入,因为它是由第三方应用程序生成的。假设这是一个接受XML有效负载的RESTful URL。您可以通过执行以下操作检查并查看您的帖子中是否存储了任何信息:
print_r( $_POST );
您想要做的可能是在名为XML
的键中发送XML数据,或者类似的结果是$\u POST['XML']='your XML code'
编辑:
如果您可以根据PHP手册发布用于创建
$\u post
的代码,那就太好了,php://input 不适用于enctype=“multipart/form data”。
。如果这是发布给您的内容,PHP将不允许您访问原始数据。
此问题的一个解决方法:(来源:) 将此添加到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>
SetEnvIf内容类型^(多部分/表单数据)(*)多部分内容类型=$1$2
RequestHeader设置内容类型应用程序/x-httpd-php env=MULTIPART\u CTYPE
RequestHeader集合X-Real-Content-Type%{MULTIPART\u CTYPE}e env=MULTIPART\u CTYPE
从PHP5.4开始,还有“启用后期数据读取”ini设置()
PHP手册中:“禁用此选项会导致$\u POST和$\u文件无法填充。读取postdata的唯一方法是通过php://input 流包装器。这对于代理请求或以内存高效的方式处理POST数据非常有用。”
尝试禁用此设置,然后读取
php://input
如何发送xml数据?@Rakeshharma它是由第三方应用程序发送的。想象一下使用CURL发布:$data='foo';curl_setopt_数组($ch,数组(CURLOPT_POSTFIELDS=>$data,CURLOPT_POST=>TRUE));你能确认第三方应该发送的数据实际上正在发送吗(即,你确定你实际上正在接收数据吗)?我确定它正在发送数据。这两个选项中的哪一个解决了你的问题?POST是由我无法控制的第三方应用程序发送的,因此我无法发送密钥/值对。假设这是一个带有XML负载的RESTful URL。您是否从包含数据的print\r($\u POST)或print\r($\u GET)中获得任何结果?它们是空白数组。