Cet article présente principalement la méthode foreach combinée avec curl pour réaliser le multi-threading en PHP. Il analyse les principes et les techniques d'implémentation de l'instruction foreach combinée avec l'appel de boucle curl pour simuler le multi-threading sous forme d'exemples. besoin peut s'y référer
Le multi-threading n'est pas supporté par PHP, mais on peut utiliser foreach pour faire du pseudo-multi-thread, mais la vitesse de ce pseudo-multi-threading n'est pas forcément plus rapide que celle du simple thread. Jetons un coup d'œil à un exemple.
Lorsque vous utilisez l'instruction foreach pour parcourir les URL d'images et enregistrer toutes les images localement via CURL, un problème survient : une seule image peut maintenant être collectée. résumera la méthode de combinaison de foreach et de CURL pour effectuer plusieurs requêtes d'URL
Méthode 1 : demande de boucle
$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);
Ce qui nécessite une attention particulière dans le code ci-dessus, c'est que curl_close doit être placé à l'extérieur de la fin de la boucle foreach, s'il est placé à l'intérieur, il y aura plusieurs IMGURL que j'ai mentionnées ci-dessus, et une seule URL pourra être collectée
.Méthode 2 : Boucle multithread
<?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.jb51.net', 'http://tools.jb51.net', ));
Ici, nous utilisons principalement curl_multi_init() pour implémenter plusieurs Requêtes d'URL. Cependant, comme PHP lui-même ne prend pas en charge le multi-threading, le pseudo-multi-threading n'est donc pas nécessairement plus rapide que le mono-threading
Résumé : ce qui précède est le cas. tout le contenu de cet article, j'espère qu'il sera utile à l'apprentissage de chacun.
Recommandations associées :
phpLisez le fichier côté serveur et affichez-le sur l'instance de page Web
Utilisez php pour interagir avec le serveur et l'interface frontale Web
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!