Php 使用CURLOPT_POSTFIELDS时的数组2字符串转换

Php 使用CURLOPT_POSTFIELDS时的数组2字符串转换,php,arrays,curl,libcurl,notice,Php,Arrays,Curl,Libcurl,Notice,我有以下代码: // $postfields = array(); curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); My$postfields变量是一个参数数组。我注意到了数组到字符串的转换。它的工作方式是 我可以使用http\u build\u query()函数取消通知,但是我使用@path\u to\u file包含post文件。和http\u build\u query()中断文件包含的内容 我想知道是否有更“合适”的方法来做到这一

我有以下代码:

// $postfields = array();
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
My
$postfields
变量是一个参数数组。我注意到了数组到字符串的转换。它的工作方式是

我可以使用
http\u build\u query()
函数取消通知,但是我使用
@path\u to\u file
包含post文件。和
http\u build\u query()
中断文件包含的内容


我想知道是否有更“合适”的方法来做到这一点。不生成通知。

$postfields
数组本身的一些值吗?这很可能是引起通知的原因
curl_setops
希望它的第三个参数是一个数组,其键和值是字符串,如中所述,尽管可能不太清楚:

此参数可以作为urlencoded字符串(如“para1=val1¶2=val2&…”)传递,也可以作为以字段名为键、字段数据为值的数组传递

在这段引文中,关键点是para1/2和val1/2是字符串,如果需要,可以将它们作为数组提供,其中键是para1和para2,值是val1和val2

有两种方法可以消除通知

第一个是使用
http\u build\u query()
并将您对
@filepath的使用替换为。不幸的是,这只有在使用PHP5.5或更高版本时才可能实现。手册的页面有一个非常清晰和简单的页面


如果使用CURLFiles不是您的选择,那么第二种方法是
json\u encode()
您的
$postfields
数组本身的值。这并不优雅,它要求您在另一端解码JSON。

j11e的答案无法用于发送多维数组

试试这个递归函数


使用Laravel对我有效的一件事是在请求头中使用标记“Content-Type:application/json”,并发送json编码的数据,如下所示:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Accept: application/json'));
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
在接收请求中的参数的函数中,我不需要使用json解码函数,我访问参数就像


$request->something

实际上,这个数组的3个值就是数组本身。。。我没有使用它们,因此这些可能无法正确导出。我不认为那些可能是内部数组。使用
http\u build\u query
CURLFiles
不起作用。
CURLFiles
将被转换成数组,并作为常规的
$\u POST
数据显示出来。这就是我所需要的。为了在curl request中使用etc,这是正确的答案。谢谢你
curl_setopt($ch, CURLOPT_POSTFIELDS, build_post_fields($postfields));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Accept: application/json'));
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));