[英]Posting an array with curl_setopt
附加的代碼返回“注意:數組到字符串轉換...”。 只是我的數組被作為包含“Array”字符的字符串處理到遠程服務器。 其余的變量都很好。
如何在沒有這個問題的情況下傳遞我的數組$anarray
?
<?php
$data = array(
'anarray' => $anarray,
'var1' => $var1,
'var2' => $var2
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "MY_URL");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);
?>
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
// The values of variables will be shown but since we don't have them this is what we get
然后,您可以使用$_POST
超全局正常訪問它
實現目標的最佳方法是使用http_build_query()
。
來自http://www.php.net/manual/en/function.curl-setopt.php CURLOPT_POSTFIELDS的描述
要在HTTP“POST”操作中發布的完整數據。 要發布文件,請在文件前加上@並使用完整路徑。 可以通過使用格式為'; type = mimetype'的類型的文件名來明確指定文件類型。 此參數可以作為urlencoded字符串傳遞,如'para1 = val1&para2 = val2&...',也可以作為數組傳遞,字段名稱為鍵,字段數據為值。 如果value是數組,則Content-Type標頭將設置為multipart / form-data。 從PHP 5.2.0開始,如果使用@前綴將文件傳遞給此選項,則value必須是數組。
由於HTTP協議的性質以及curl_setopt函數的工作方式,$ anarray不能直接作為數組傳遞。
以下聲明:
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
獲取一系列POST參數,對於每個參數,必須有一個字符串名稱和一個STRING值。 您正在傳遞一個數組值,因此PHP處理器被迫使用一些蹩腳的內置算法將其轉換為字符串,這會產生前面提到的通知(“數組轉換為字符串轉換...”)。
因此,為了將該數組($ anarray)正確傳遞給另一方,您必須自己處理其編碼(到字符串中),以及另一方必須處理其解碼(從字符串開始) )。
我在這種情況下的方法是JSON。 它幾乎適用於所有情況。 您所要做的就是應用以下技術:
$data=array(
'anarray'=>json_encode($anarray),
'var1'=>$var1,
'var2'=>$var2
);
然后,在連接的另一端,您將通過以下方式檢索原始數組:
$anarray=json_decode($_POST['anarray'],true); // true indicates for associative array rather than an object
如果$ anarray是一個數組,我懷疑它是,它不應該是。 通過連接或任何適當的方法將其轉換為字符串。
編輯:見Eric Butera的回答。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.