Curl_setopt ile bir dizi Gönderme

5 Cevap php

": In dize dönüştürme Array .. Notice" ekli kodu döndürüyor. Sadece benim dizi "Dizi" kelimesini içeren bir dize olarak uzak sunucuya ele ediliyor. değişkenlerin kalanı gayet iyi.

Nasıl bu sorun olmadan benim dizisi ($ anarray) geçebilir?

Teşekkürler.

<?php

$data = array(
    'anarray' => $anarray,
    'var1' => $var1,
    'var2' => $var2
 );

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "MY_URL");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);

?>

5 Cevap

Sonra ne konum gerçekleştirmek için en iyi yolu, http_build_query kullanmaktır. http://us.php.net/http_build_query

$ Anarray bir dizi varsa ben şüpheli gibi, bu olmamalı. Bitiştirmekten veya uygun olursa olsun yöntemi ile, bir dizeye çevirin.

Edit: Eric Butera cevabını bakın.

CURLOPT_POSTFIELDS ve http://www.php.net/manual/en/function.curl-setopt.php açıklamasından

The full data to post in a HTTP "POST" operation. To post a file, prepend a filename with @ and use the full path. The filetype can be explicitly specified by following the filename with the type in the format ';type=mimetype'. This parameter can either be passed as a urlencoded string like 'para1=val1&para2=val2&...' or as an array with the field name as key and field data as value. If value is an array, the Content-Type header will be set to multipart/form-data. As of PHP 5.2.0, value must be an array if files are passed to this option with the @ prefix.

Nedeniyle HTTP protokolü ve curl_setopt işlevi çalışır şekilde doğası, $ anarray bir dizi olarak doğrudan geçti olamaz.

Aşağıdaki deyim:

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

POST parametreleri bir dizi alır ve bunların her biri için bir dize isim ve STRING değer olmalıdır. Bunun yerine bir dizi değeri geçiyoruz, bu yüzden PHP işlemcisi daha önce belirtilen bildirim verilmesi doğurur yerleşik algoritma bazı topal, kullanarak bir dizeye dönüştürmek zorunda kalır ("in dize dönüştürme Array ..").

Yani, düzgün bir diğer tarafa bu diziyi ($ anarray) geçmek için, (a dizeye) kendi kodlama kendinizi, hem de diğer tarafı dizeden (kendi çözme dikkat çekmek için var dikkatli olmalısınız .)

Böyle durumlarda benim yaklaşım JSON. Hemen hemen tüm durumlarda, yeterince uygundur. Yapmanız gereken tek şey aşağıdaki tekniği uygulayın:

$data=array(
    'anarray'=>json_encode($anarray),
    'var1'=>$var1,
    'var2'=>$var2
    );

Ve sonra, bağlantının diğer tarafta orijinal dizinin şu şekilde almak istiyorum:

$anarray=json_decode($_POST['anarray'],true); // true indicates for associative array rather than an object