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