Maison >développement back-end >tutoriel php >PHP utilise CURL pour implémenter le multithreading afin d'explorer des pages Web ou de télécharger des fichiers

PHP utilise CURL pour implémenter le multithreading afin d'explorer des pages Web ou de télécharger des fichiers

墨辰丷
墨辰丷original
2018-06-11 11:23:402006parcourir

PHP peut utiliser Curl pour effectuer diverses opérations de transfert de fichiers, telles que la simulation d'un navigateur pour envoyer des requêtes GET, POST, etc. Cependant, comme le langage PHP lui-même ne prend pas en charge le multi-threading, le développement de programmes d'exploration n'est pas efficace, mais vous pouvez utiliser Curl. Utilisez la fonction Curl pour obtenir un accès multithread simultané à plusieurs adresses URL afin de réaliser une analyse multithread simultanée de pages Web ou de téléchargement de fichiers

PHP peut utiliser les fonctions Curl pour effectuer diverses opérations de transfert de fichiers. , comme la simulation d'un navigateur pour envoyer des requêtes GET, POST, etc. sont limités par le fait que le langage PHP lui-même ne prend pas en charge le multi-threading, de sorte que l'efficacité du développement de programmes d'exploration n'est pas élevée à l'heure actuelle. pour utiliser Curl Multi Functions, qui peut obtenir un accès multithread simultané à plusieurs adresses URL. Étant donné que Curl Multi Function est si puissant, Curl Multi Functions peut-il être utilisé pour écrire des téléchargements de fichiers multithread simultanés. Bien sûr, mon code est donné ci-dessous :

Code 1 : Écrivez le code obtenu directement dans un certain fichier ?

<?php 
$urls = array(  
 &#39;http://www.sina.com.cn/&#39;,  
 &#39;http://www.sohu.com/&#39;,  
 &#39;http://www.163.com/&#39; 
); // 设置要抓取的页面URL  
   
$save_to=&#39;/test.txt&#39;;  // 把抓取的代码写入该文件   
  
$st = fopen($save_to,"a");  
$mh = curl_multi_init();   
  
foreach ($urls as $i => $url) {  
 $conn[$i] = curl_init($url);  
 curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)");  
 curl_setopt($conn[$i], CURLOPT_HEADER ,0);  
 curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60);  
 curl_setopt($conn[$i], CURLOPT_FILE,$st); // 设置将爬取的代码写入文件  
 curl_multi_add_handle ($mh,$conn[$i]);  
} // 初始化  
   
do {  
 curl_multi_exec($mh,$active);  
} while ($active); // 执行  
   
foreach ($urls as $i => $url) {  
 curl_multi_remove_handle($mh,$conn[$i]);  
 curl_close($conn[$i]);  
} // 结束清理  
   
curl_multi_close($mh);  
fclose($st); 
?>

Code 2 : Mettez d'abord le code obtenu dans une variable, puis écrivez-le dans un fichier

<?php 
$urls = array(  
 &#39;http://www.sina.com.cn/&#39;,  
 &#39;http://www.sohu.com/&#39;,  
 &#39;http://www.163.com/&#39; 
);  
  
$save_to=&#39;/test.txt&#39;;  // 把抓取的代码写入该文件  
$st = fopen($save_to,"a");  
  
$mh = curl_multi_init();  
foreach ($urls as $i => $url) {  
 $conn[$i] = curl_init($url);  
 curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)");  
 curl_setopt($conn[$i], CURLOPT_HEADER ,0);  
 curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60);  
 curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,true); // 设置不将爬取代码写到浏览器,而是转化为字符串  
 curl_multi_add_handle ($mh,$conn[$i]);  
}  
  
do {  
 curl_multi_exec($mh,$active);  
} while ($active);  
   
foreach ($urls as $i => $url) {  
 $data = curl_multi_getcontent($conn[$i]); // 获得爬取的代码字符串  
 fwrite($st,$data); // 将字符串写入文件。当然,也可以不写入文件,比如存入数据库  
} // 获得数据变量,并写入文件  
  
foreach ($urls as $i => $url) {  
 curl_multi_remove_handle($mh,$conn[$i]);  
 curl_close($conn[$i]);  
}  
  
curl_multi_close($mh);  
fclose($st);  
?>

Résumé : C'est tout pour cet article J'espère que l'ensemble du contenu sera utile à l'étude de chacun.

Recommandations associées :

PHP implémente une lecture en ligne simple des fichiers PDF

Méthodes courantes de gestion des exceptions PHP

Deux méthodes de fusion de tableaux PHP

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!

Déclaration:
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