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 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( 'http://www.sina.com.cn/', 'http://www.sohu.com/', 'http://www.163.com/' ); // 设置要抓取的页面URL $save_to='/test.txt'; // 把抓取的代码写入该文件 $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( 'http://www.sina.com.cn/', 'http://www.sohu.com/', 'http://www.163.com/' ); $save_to='/test.txt'; // 把抓取的代码写入该文件 $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!