問題:
CURL を介した多次元フォーム配列の PHP スクリプトへのポスト別のホスト上で実行すると、「配列から文字列への変換」エラーが発生します。ファイルのアップロードにより Content-Type ヘッダーを multipart/form-data に設定するには、curl_setopt() の 3 番目の引数は配列である必要があります。ただし、CURLOPT_POSTFIELDS は多次元配列をサポートしていないようです。
解決策:
CURLOPT_POSTFIELDS の制限にもかかわらず、http_build_query_for_curl() 関数を使用する回避策があります。この関数は、多次元配列を、curl_setopt() に適したフラット配列に再帰的に変換します。
コード例:
<code class="php">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);</code>
出力:
Array ( [name[first][0]] => Natali [name[first][1]] => Yura )
このフラット配列は、3 番目の引数としてcurl_setopt() に渡すことができ、CURL 経由で多次元配列を正常に送信できます。
以上がPHP と CURL 経由で多次元配列をポストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。