微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

file_get_contents('php://input') 和POST的区别

之前记得写过这2者的区别,今天看群里有个朋友也提出了怪异的问题,说是“file_get_contents('PHP://input')获取不到curl post请求的数据的问题”?
其实这并不是所谓的"怪异",理解2者的区别其实就明白原因啦,好,直接举个例子吧,2个文件
1:发送数据的文件,如下:

复制代码

<?PHP
$ch = curl_init();
$data = ['username' => '周伯通','password' => '123456','sign'=>'asdfg123456'];
$url = 'http://xxx.com/fpost.PHP';//fpost.PHP是接受数据的文件代码在下面
$ch = curl_init(); //初始化curl
curl_setopt($ch,CURLOPT_URL,$url);//设置链接
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//设置是否返回信息
curl_setopt($ch,CURLOPT_POST,1);//设置为POST方式
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);//POST数据
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)");
$response = curl_exec($ch);//接收返回信息
if(curl_errno($ch)){//出错则显示错误信息
    print curl_error($ch);
}
curl_close($ch); //关闭curl链接
echo $response;//显示返回信息

复制代码

2:接受数据的文件,如下:

<?PHP
$res = file_get_contents('PHP://input');
var_dump('file_get_contents 数据是:'.$res);
echo'<br> post 数据是:';
var_dump($_POST);

运行后我们会发现:file_get_contents('PHP://input')不能接收curl post过来的数组。

解释:
如果POST的原始数据是一维数组或&拼接的标准格式的键值对字符串,那么可以用$_POST获取
如果要通过file_get_contents获取,这种情况下可以发送json字符串,用json_encode转一下,或者使用http_build_query:比如上面修改如下:

curl_setopt($ch,http_build_query($data));//POST数据

结果:

string(97) "file_get_contents 数据是:username=%E5%91%A8%E4%BC%AF%E9%80%9A&password=123456&sign=asdfg123456" 
post 数据是:array(3) { ["username"]=> string(9) "周伯通" ["password"]=> string(6) "123456" ["sign"]=> string(11) "asdfg123456" }

所以大家在使用中,注意下传参的方式即可解决问题。无非就这2种比较常用的数据传参方式啦。

无论从事什么行业,只要做好两件事就够了,一个是你的专业、一个是你的人品,专业决定了你的存在,人品决定了你的人脉,剩下的就是坚持,用善良專業和真诚赢取更多的信任。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐