Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP读取非键/值POST数据_Php_Apache_Http_Post - Fatal编程技术网

从PHP读取非键/值POST数据

从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

我有一个系统,它将数据发布到URL,而不发送键/值对,而是使用XML负载。我需要在Apache下使用PHP读取XML数据,但是PHP的
$\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)中获得任何结果?它们是空白数组。