Heim  >  Artikel  >  Backend-Entwicklung  >  Beispielanalyse von foreach in Kombination mit Curl, um Multithreading in PHP zu erreichen

Beispielanalyse von foreach in Kombination mit Curl, um Multithreading in PHP zu erreichen

墨辰丷
墨辰丷Original
2018-06-01 10:54:131579Durchsuche

Dieser Artikel stellt hauptsächlich die Methode von foreach in Kombination mit Curl vor, um Multithreading in PHP zu realisieren. Er analysiert die Prinzipien und Implementierungstechniken von foreach-Anweisungen in Kombination mit Curl-Schleifenaufrufen, um Multithreading in Form von Freunden zu simulieren Bedarf kann darauf verweisen

Multithreading wird von PHP nicht unterstützt, aber wir können foreach für Pseudo-Multithreading verwenden, aber die Geschwindigkeit dieses Pseudo-Multithreadings ist nicht unbedingt schneller als die von Single Schauen wir uns ein Beispiel an.

Wenn wir die foreach-Anweisung verwenden, um Bild-URLs zu durchlaufen und alle Bilder lokal über CURL zu speichern, tritt das Problem auf, dass nur ein Bild erfasst werden kann fasst die Methode zum Kombinieren von foreach und CURL zusammen, um mehrere URL-Anfragen zu stellen

Methode 1: Schleifenanforderung

$sr=array(url_1,url_2,url_3);
foreach ($sr as $k=>$v) {
 $curlPost=$v.'?f=传入参数';
 $ch = curl_init($curlPost) ;
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
 curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回
 $data = curl_exec($ch) ;
 echo $k.&#39;##:&#39;.$data.&#39;<br>&#39;;
}
curl_close($ch);

Was im obigen Code besonders beachtet werden muss, ist, dass curl_close in foreach platziert werden muss. Wenn es außerhalb des Endes der Schleife platziert wird, gibt es, wie oben erwähnt, mehrere IMGURLs und es kann nur eine URL erfasst werden

Methode 2: Multithread-Schleife

<?php
multi_threads_request($nodes){
  $mh = curl_multi_init();
  $curl_array = array();
  foreach($nodes as $i => $url)
  {
   $curl_array[$i] = curl_init($url);
   curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, true);
   curl_multi_add_handle($mh, $curl_array[$i]);
  }
  $running = NULL;
  do {
   usleep(10000);
   curl_multi_exec($mh,$running);
  } while($running > 0);
  $res = array();
  foreach($nodes as $i => $url)
  {
   $res[$url] = curl_multi_getcontent($curl_array[$i]);
  }
  foreach($nodes as $i => $url){
   curl_multi_remove_handle($mh, $curl_array[$i]);
  }
  curl_multi_close($mh);
  return $res;
}
print_r(multi_threads_request(array(
 &#39;http://www.jb51.net&#39;,
 &#39;http://tools.jb51.net&#39;,
));

Hier verwenden wir hauptsächlich curl_multi_init(), um mehrere URL-Anfragen zu implementieren. Da PHP selbst kein Multithreading unterstützt, ist die Pseudo-Multithreading-Geschwindigkeit möglicherweise nicht schneller als ein einzelner Thread.

Zusammenfassung: Das Obige ist das Ganze Ich hoffe, dass der Inhalt dieses Artikels für das Lernen aller hilfreich sein wird.

Verwandte Empfehlungen:

phpLesen Sie die serverseitige Datei und zeigen Sie sie auf der Webseiteninstanz an

Verwenden Sie php, um mit dem Server und der Web-Front-End-Schnittstelle zu interagieren

Verwenden Sie php, um eine automatische Anmeldung zu realisieren Speichermechanismus innerhalb einer Woche

Das obige ist der detaillierte Inhalt vonBeispielanalyse von foreach in Kombination mit Curl, um Multithreading in PHP zu erreichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn