Nasıl cURL ile kullanılacak benim dizi otomatikleştirmek istiyorsunuz?

2 Cevap php

Ben bir MySQL tablo içeriğini içeren bir dizi var. Ben hepsini eş zamanlı olarak yürütebilirsiniz böylece curl_multi_handles içine bu içeriklerin her koymak gerekir

İşte dizi için kodudur durumda da yardımcı olur:

$SQL = mysql_query("SELECT url FROM urls") or die(mysql_error()); 
                    while($resultSet = mysql_fetch_array($SQL)){    
                        $urls[]=$resultSet 
                        }

Yani aynı anda her url veri göndermek mümkün koymak gerekir. Ben geri herhangi bir veri almak gerekmez, ve aslında ben iki saniye sonra onlara zaman dışarı sahip olacak. Sadece veri ve daha sonra yakın göndermek gerekiyor.

Önce bu benim kod, bir anda teker yürütülüyor. burada kodu:

    $SQL = mysql_query("SELECT url FROM shells") or die(mysql_error());                         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);
            curl_close($ch);

Yani benim soru: Nasıl her kolunu kaldırın ve curl_multi_handle kapatın çalıştırmak, curl_multi_handle içine dizinin içeriğini yüklemek, ve olabilir?

2 Cevap

Hala curl_init ve curl_setopt diyoruz. Sonra bir multi_handle içine yüklemek, ve bitti kadar yürütmek aramaya devam. Bu curl_multi_init de belgelere dayanmaktadır. İki saniye içinde dışarı zamanlama ve yanıtları işlem değil çünkü, ben sadece bir anda iki saniye boyunca uyuyabilir düşünüyorum. Aslında yanıtlarını işleyecek gerekiyorsa curl_multi_select daha iyi olabilir.

    $SQL = mysql_query("SELECT url FROM shells") ;
    $mh = curl_multi_init();
    $handles = array();
    while($resultSet = mysql_fetch_array($SQL)){       
            //load the urls and send GET data                     
            $ch = curl_init($resultSet['url'] . $fullcurl); 
            //Only load it for two seconds (Long enough to send the data)
            curl_setopt($ch, CURLOPT_TIMEOUT, 2);           
            curl_multi_add_handle($mh, $ch);
            $handles[] = $ch;
    }

    // Create a status variable so we know when exec is done.
    $running = null;
    //execute the handles
    do {
      // Call exec.  This call is non-blocking, meaning it works in the background.
      curl_multi_exec($mh,$running);
      // Sleep while it's executing.  You could do other work here, if you have any.
      sleep(2);
    // Keep going until it's done.
    } while ($running > 0);

    // For loop to remove (close) the regular handles.
    foreach($handles as $ch)
    {
      // Remove the current array handle.
      curl_multi_remove_handle($mh, $ch);
    } 
    // Close the multi handle
    curl_multi_close($mh);

If i were you, i would write class mysql and a class curl. Its very good at all. First i would create a method witch would return all urls from a passed mysql result.

Gibi bir şey

public function getUrls($mysql_fetch_array)
{
    foreach($mysql_fetch_array as $result)
    {
       $urls[] = $result["url"];
    }                         
}


then you could write a method like curlSend($url,$param)

//remember you have to edit i dont know your full code so its just
// a way you could do it

public function curlSend($url,$param="")
{
$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);
            curl_close($ch); 

}

public function send()
{
  $urls = getUrls($this->mysql->result($sql));

  foreach($urls as $url)
  {
     $this->curlSend($url);
  }
}

Şimdi bu bunu nasıl olduğunu.