Nasıl cURL kullanarak aynı anda birden fazla URL GET veri gönderebilir?

1 Cevap php

Özür dilerim, ben aslında bu soruyu defalarca sordum, ama oldukça cevapları anladım hiç.

İşte benim geçerli kod:

while($resultSet = mysql_fetch_array($SQL)){            
$ch = curl_init($resultSet['url'] . $fullcurl); //load the urls and send GET data
            curl_setopt($ch, CURLOPT_TIMEOUT, 2);           //Only load it for two seconds (Long enough to send the data)
            curl_exec($ch);                                 //Execute the cURL
            curl_close($ch);                                //Close it off 
} //end while loop

Ben burada ne yapıyorum, ona bazı ekstra değişkenleri, sadece bazı GET verileri ($ fullcurl) ekleyerek, MySQL Veritabanı ($ Resultset ['url']) URL'leri alarak ve sadece sayfaları istiyor. Bu bu sayfalarda çalışan komut dosyasını başlatır, ve bu komut yapması gereken, hepsi bu komut başlayın. Herhangi çıktı dönmek gerekmez. Sadece yük başlatmak için komut dosyası için yeterince uzun sayfa.

Ancak şu anda bir anda her bir URL (şu anda 11) bir yüklüyor. Ben aynı anda hepsini yüklemeniz gerekir. Ben curl_multi_ * kullanmak gerekir anlıyorum, ama ben cURL işlevlerinin nasıl çalıştığı hakkında en ufak bir fikrim yok, bu yüzden bir süre döngü * curl_multi_ kullanmak benim kodunu değiştirmek için nasıl bilmiyorum.

Yani benim sorular şunlardır:

Nasıl ben aynı anda tüm URL'leri yüklemek için bu kodu değiştirebilirsiniz? Açıklamak ve bana kodu vermeyecektir ediniz. Ben tam her işlevi ne yaptığını bilmek istiyorum. While döngüsü sadece bir anda her satır bir gönderme olduğundan, bir süre döngü içinde çalışmak bile curl_multi_exec mı?

Ve tabii ki, cURL işlevleri hakkında herhangi referanslar, rehberleri öğreticiler yanı sıra, güzel olurdu. Bana sözdizimi vererek iyi bir iş yapar iken gibi, php.net tercihen çok değil, onun sadece bir little, kuru ve çok iyi değil açıklamalar.

EDIT: zaf Tamam, şimdi benim geçerli kod:

        $mh = curl_multi_init(); //set up a cURL multiple execution handle

$SQL = mysql_query("SELECT url FROM urls") or die(mysql_error()); //Query the shell table
                    while($resultSet = mysql_fetch_array($SQL)){   

        $ch = curl_init($resultSet['url'] . $fullcurl); //load the urls and send GET data
        curl_setopt($ch, CURLOPT_TIMEOUT, 2);           //Only load it for two seconds (Long enough to send the data)
        curl_multi_add_handle($mh, $ch);
    } //No more shells, close the while loop

        curl_multi_exec($mh);                           //Execute the multi execution
        curl_multi_close($mh);                          //Close it when it's finished.

1 Cevap

Sizin ise döngü olarak, her bir URL için aşağıdakileri yapmanız gerekir:

  • curl_init kullanarak bir kıvrılma kaynak oluşturmak ()
  • curl_setopt tarafından kaynak için seçenekleri ayarlamak (..)

Sonra (...)) curl_multi_init (kullanarak bir çoklu cURL tanıtıcısı oluşturmak gerekiyor ve buna ekleyelim curl_multi_add_handle kullanarak tüm önceki bireysel kıvırmak kaynak ekleyerek

Sonra nihayet curl_multi_exec (...) yapabilirsiniz.

Bunun iyi bir örneği burada bulunabilir: http://us.php.net/manual/en/function.curl-multi-exec.php