При публикации данных формы, содержащих многомерные массивы, с использованием CURL, частой проблемой является ошибка «Преобразование массива в строку». Это происходит при попытке установить CURLOPT_POSTFIELDS с массивом, включающим массивы.
Поскольку заголовок Content-Type должен быть multipart/form-data для облегчения передачи файлов, преобразование массива в строку запроса или использование http_build_query() не осуществимо. Кроме того, доступ к коду принимающего хоста для сериализации и десериализации массива невозможен.
Чтобы решить эту проблему, можно использовать пользовательскую функцию с именем http_build_query_for_curl. Он рекурсивно перебирает массив, преобразуя его в формат, подходящий для запросов CURL POST. Измененный массив затем можно присвоить $post и передать в Curl_setopt(), чтобы избежать ошибки.
Вот код функции http_build_query_for_curl и пример ее использования:
function http_build_query_for_curl( $arrays, &$new = array(), $prefix = null ) {
if ( is_object( $arrays ) ) {
$arrays = get_object_vars( $arrays );
}
foreach ( $arrays AS $key => $value ) {
$k = isset( $prefix ) ? $prefix . '[' . $key . ']' : $key;
if ( is_array( $value ) OR is_object( $value ) ) {
http_build_query_for_curl( $value, $new, $k );
} else {
$new[$k] = $value;
}
}
}
$arrays = array(
'name' => array(
'first' => array(
'Natali', 'Yura'
)
)
);
http_build_query_for_curl( $arrays, $post );
print_r($post);
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3