CURL에서는 POST 로 문자열이나 배열을 전송하면 상대 측에서 값을 받을 수 있습니다.
<?php
$_POST['name'] ='하보니';
$_POST['email'] = 'habony@example.com';
curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
?>
하지만 중첩된 배열을 전송하게 되면 어떤 문제가 발생하게 되는데, CURL에서 중첩된 배열을 전송하면 우리가 예상했던거와는 다르게 Array 라는 문자열이 전송됩니다.
그래서 이러한 문제를 해결하기 위해 http_build_query() 함수를 이용하거나 아래 사용자 함수를 만들어 원하는 값을 전송할 수 있습니다.
<?php
function Curl_Postfields_Create($input, $prefix = '') {
if(!is_array($input)) {
return $input;
}
$output = array();
foreach($input as $key => $value) {
$final_key = $prefix ? $prefix[$key] : $key;
if(is_array($value)) {
$output += Curl_Postfields_Create($value, $final_key);
} else {
$output[$final_key] = $value;
}
}
return $output;
}
$_POST['name'] = '하보니';
$_POST['email'] = 'habony@emample.com';
$_POST['type']['file']['name'] = 'habonyphp.bmp';
$_POST['type']['mime'] = 'bmp';
$output = Curl_Postfields_Create($_POST);
curl_setopt($ch, CURLOPT_POSTFIELDS, $output);
?>
CURL에서 단순한 배열 또는 문자열이 아니면 올바로 전송할 수 없으므로 중첩된 배열을 분해해서 단순한 문지열로 변환한 후 전송하는 방법입니다.