Das Beispiel in diesem Artikel beschreibt die Methode zum Kombinieren von foreach mit Curl in PHP, um Multithreading zu erreichen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
Multi-Threading wird von PHP nicht unterstützt, aber wir können foreach für Pseudo-Multi-Threading verwenden, dieses Pseudo-Multi-Threading jedoch nicht notwendigerweise schneller als Single-Threading. Schauen wir uns ein Beispiel an.
Wenn Sie die foreach-Anweisung verwenden, um Bild-URLs zu durchlaufen und alle Bilder lokal über CURL zu speichern, besteht das Problem, dass nur eines erfasst werden kann . Verwenden Sie nun foreach und CURL. Fassen wir die Methode zum Erstellen mehrerer URL-Anfragen zusammen.
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.'##:'.$data.'<br>'; } curl_close($ch);
<?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( 'http://www.php.cn', 'http://tools.php.cn', ));
Weitere Analysen zur Methode von foreach in Kombination mit Curl zur Erzielung von Multithreading in PHP finden Sie auf der chinesischen PHP-Website!