Подтвердить что ты не робот

Проводка массива с 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);

?>
4b9b3361

Ответ 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 - массив, как я подозреваю, это не должно быть. Поверните его в строку, путем конкатенации или любого подходящего метода.

Изменить: см. ответ Эрика Бутера.