9

I am sending data from my local machine to server using CURL. And the data is multidimensional array.

Array
(
[0] => stdClass Object
    (
        [id] => 1
    )
[1] => stdClass Object
    (
        [id] => 0
    )
[2] => stdClass Object
    (
        [id] => 11
    )
)

I am using this below code for sending the data.

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, "my_url");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $array);  // $array is my above data

But at server when I try to put this incoming data to file or just print_r it gives me this below output

Array
(
[0] => Array
[1] => Array
[2] => Array
)

But I want the output in multidimensional.

I tried with print_r($_POST[0]) but it gives only Array text.

4

3 に答える 3

25

cURL は、値が文字列である単純なキーと値のペアの配列のみを受け入れることができます。オブジェクトの配列であるあなたのような配列を取ることはできません。ただし、既製の POST データの文字列を受け入れるため、自分で文字列を作成して代わりに渡すことができます。

$str = http_build_query($array);

...

curl_setopt($ch, CURLOPT_POSTFIELDS, $str);

print_r($_POST)受信側の Aには次のように表示されます。

Array
(
    [0] => Array
        (
            [id] => 1
        )

    [1] => Array
        (
            [id] => 0
        )

    [2] => Array
        (
            [id] => 11
        )

)
于 2013-01-31T12:21:28.550 に答える
3

シリアライズとアンシリアライズを試してみます:

1)配列を送信する前に、配列をシリアル化します(そして転送モードをバイナリに設定します):

(...)
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);           // need this to post serialized data
curl_setopt($ch, CURLOPT_POSTFIELDS, serialize($array));  // $array is my above data

2) データを受け取ったら、シリアル化を解除します。

$array = unserialize($_POST);

詳細はこちらこちら

于 2013-01-31T12:42:47.640 に答える