Проводка массива с curl_setopt
Вложенный код возвращает "Notice: массив для преобразования строки в...". Просто мой массив обрабатывается на удаленном сервере как строка, содержащая слово "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);
?>
Ответы
Ответ 1
Используйте http_build_query()
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
superglobal
Ответ 2
Лучший способ выполнить то, что вам нужно, - использовать http_build_query()
.
Ответ 3
Из http://www.php.net/manual/en/function.curl-setopt.php описание CURLOPT_POSTFIELDS
Полные данные для публикации в HTTP-режиме "POST". Чтобы опубликовать файл, добавьте имя файла с помощью @и используйте полный путь. Тип файла может быть явно указывается, следуя имени файла с типом в format '; type = mimetype'. Этот параметр может быть передан как urlencoded string как 'para1 = val1 & para2 = val2 &...' или как массив с имя поля в качестве ключа и данные поля как значение. Если значением является массив, заголовок Content-Type будет установлен в multipart/form-data. Начиная с PHP 5.2.0, значение должно быть массивом, если файлы передаются этому параметру с префиксом @.
Ответ 4
Из-за характера протокола HTTP и того, как работает функция curl_setopt, $anarray не может передаваться непосредственно в виде массива.
Следующее утверждение:
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
принимает массив параметров POST, и для каждого из них должно быть имя строки и значение STRING. Вместо этого вы передаете значение массива, поэтому PHP-процессор вынужден преобразовать его в строку с использованием какого-то хромого встроенного алгоритма, который требует выдачи ранее упомянутого уведомления ( "Array to string conversion in..." ).
Итак, чтобы правильно передать этот массив ($ 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
Ответ 5
Если $anarray - массив, как я подозреваю, это не должно быть. Поверните его в строку, путем конкатенации или любого подходящего метода.
Изменить: см. ответ Эрика Бутера.