Exemple d'analyse de foreach combiné avec curl pour réaliser le multi-threading en PHP

墨辰丷
Libérer: 2023-03-28 22:14:01
original
1586 Les gens l'ont consulté

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.&#39;##:&#39;.$data.&#39;<br>&#39;;
}
curl_close($ch);
Copier après la connexion

.

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(
 &#39;http://www.jb51.net&#39;,
 &#39;http://tools.jb51.net&#39;,
));
Copier après la connexion

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

Utilisez php pour réaliser une connexion automatique mécanisme de stockage dans un délai d'une semaine

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal