为什么PHP解析输入数据到_POST数组
PHP 5.6.2 我输入了脚本为什么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 ( )
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中,如果im 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);