PHP utilise le multi-threading curl pour implémenter la fonction d'exploration des pages Web

小云云
Libérer: 2023-03-22 11:36:01
original
1460 Les gens l'ont consulté

Cet article partage principalement avec vous la fonction de PHP utilisant le multi-threading curl pour explorer les pages Web. CURL prend en charge la fonction d'exploration multithread des pages Web. L'exemple de code est le suivant. J'espère que cela aide tout le monde.

class HttpMulti {
    //curl选项
    private static $options = array(
        CURLOPT_SSL_VERIFYPEER => 0,   //不开启HTTPS请求
        CURLOPT_RETURNTRANSFER => 1,  //请求信息以文件流方式返回
        CURLOPT_CONNECTTIMEOUT => 10,  //连接超时时间 默认为10s
        CURLOPT_TIMEOUT => 20,   //设置curl执行最大时间
        CURLOPT_ENCODING => "gzip", //HTTP请求头中"Accept-Encoding"的值,为空发送所有支持的编码类型
        CURLOPT_HEADER => 0, //设置为true,请求返回的文件流中就会包含response header
        CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
		CURLOPT_POST => FALSE,   //默认选择GET的方式发送
	);
	public static function multiRun($urlData=array()){
        if(empty($urlData)) return;
        $data = $curls = array();
        $mh = curl_multi_init();
        foreach($urlData as $k=>$val){
			$ch = curl_init($val);
            curl_setopt_array($ch, self::$options);
            curl_multi_add_handle($mh, $ch);
			$curls[$k] = $ch;
		}
		// 执行批处理句柄
        self::execMultiHandle($mh);
        if($curls){
            foreach($curls as $_k=>$v){
				//获得返回信息
                $data[$_k] = curl_multi_getcontent($v);
                curl_close($v);
                curl_multi_remove_handle($mh, $v);
                curl_multi_close($mh);
            }
        }
        return $data;
    }
	static private function execMultiHandle($mh){
        if(empty($mh)) return false;
        do{
            $mrc = curl_multi_exec($mh, $active);
        }while($mrc == CURLM_CALL_MULTI_PERFORM);
        while($active && $mrc == CURLM_OK){
            if(curl_multi_select($mh) != -1){
                do{
                    $mrc = curl_multi_exec($mh, $active);
                }while($mrc == CURLM_CALL_MULTI_PERFORM);
			}
        }
    }
}
//测试代码
$urlData = [
'https://www.baidu.com/',
'https://www.taobao.com/',
'http://weibo.com/',
'http://www.qq.com/'
];
$res = HttpMulti::multiRun($urlData);
Copier après la connexion

Recommandations associées :

curl capture les données de réponse de la page Web en 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!

É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