使用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