Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.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_Post - Fatal编程技术网

为什么PHP解析输入数据到_POST数组

为什么PHP解析输入数据到_POST数组,php,post,Php,Post,PHP 5.6.2 我输入了脚本curlTest.php: <?php print_r(array($_GET, $_POST, file_get_contents('php://input'))); ?> 为什么php在_POST中解析我的输入数据?但在PHP 5.2.6的另一台机器上,我有另一个输出: Array ( [0] => Array ( ) [1] => Array ( )

PHP 5.6.2

我输入了脚本
curlTest.php

<?php
print_r(array($_GET, $_POST, file_get_contents('php://input')));
?>
为什么php在_POST中解析我的输入数据?但在PHP 5.2.6的另一台机器上,我有另一个输出:

Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
        )

    [2] => test-data
)
有什么想法吗?

你在做:

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
设置
POSTFIELDS
会自动告诉curl您正在写一篇文章


post/get数据是键:值对。您已经提供了(
$data
)PHP正在解析的内容,作为一个没有值的键,因此您基本上得到了
$\u POST['test-data']=null
。POST数据通过STDIN传递给脚本,这就是为什么
php://input
显示测试数据。

但在PHP5.6中,如果我添加headertry
测试数据=foo
。甚至只是
测试数据=
。如果这出现在5.2转储文件中,那么您已经发现PHP的行为在两个版本之间发生了变化。但是在PHP5.6中,如果i
m add header
curl\u setopt($ch,CURLOPT\u HTTPHEADER,array('Content-type:multipart/form data');`_POST数组将为空,仅
php://input
。如果php v。5.2\u POST数组空(带或不带此标题)因为多部分的主体结构与标准
应用程序/x-www-form-urlencoded
表单提交不同。你基本上是在搞卷发。curl不会分析您正在执行的头覆盖。如果您设置了一个multipart头,但没有告诉curl您正在这样做,它将继续假设它是一个正常的urlencoded表单,并以您是wright的身份提交,如果我尝试发布
testdata=foo
,它将被解析为_post数组,并在PHP5.2中
Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
        )

    [2] => test-data
)
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);