Home  >  Article  >  Backend Development  >  Example of using PHP to implement multi-threaded classes using curl

Example of using PHP to implement multi-threaded classes using curl

黄舟
黄舟Original
2017-11-11 14:27:441323browse

我们在上一篇文章介绍了,php多线程类的实现方法,今天这篇文章给大家介绍php如何利用curl实现多线程的方法,有了这个类,我们也可利用该类执行多线程任务了!

php利用curl实现多线程类的示例

<?php 
class curl_multi{ 
    private $url_list=array(); 
    private $curl_setopt=array( 
        &#39;CURLOPT_RETURNTRANSFER&#39; => 1,//结果返回给变量 
        &#39;CURLOPT_HEADER&#39; => 0,//是否需要返回HTTP头 
        &#39;CURLOPT_NOBODY&#39; => 0,//是否需要返回的内容 
        &#39;CURLOPT_FOLLOWLOCATION&#39; => 0,//自动跟踪 
        &#39;CURLOPT_TIMEOUT&#39; => 6//超时时间(s) 
    ); 
    function construct($seconds=30){ 
        set_time_limit($seconds); 
    } 
    /* 
     * 设置网址 
     * @list 数组 
     */ 
    public function setUrlList($list=array()){ 
        $this->url_list=$list; 
    } 
    /* 
     * 设置参数 
     * @cutPot array 
     */ 
    public function setOpt($cutPot){ 
        $this->curl_setopt=$cutPot+$this->curl_setopt; 
    } 
    /* 
     * 执行 
     * @return array 
     */ 
    public function execute(){ 
        $mh=curl_multi_init(); 
        foreach($this->url_list as $i=>$url){ 
            $conn[$i]=curl_init($url); 
            foreach($this->curl_setopt as $key => $val){ 
                curl_setopt($conn[$i],preg_replace(&#39;/(CURLOPT_\w{1,})/ie&#39;,&#39;$0&#39;,$key),$val); 
            } 
            curl_multi_add_handle($mh,$conn[$i]); 
        } 
        $active=false; 
        do{ 
            $mrc=curl_multi_exec($mh,$active); 
        }while($mrc == CURLM_CALL_MULTI_PERFORM); 
 
        while($active and $mrc == CURLM_OK){ 
            if(curl_multi_select($mh) != -1){ 
                do{ 
                    $mrc=curl_multi_exec($mh,$active); 
                }while($mrc == CURLM_CALL_MULTI_PERFORM); 
            } 
        } 
        $res=array(); 
        foreach($this->url_list as $i => $url){ 
            $res[$i]=curl_multi_getcontent($conn[$i]); 
            curl_close($conn[$i]); 
            curl_multi_remove_handle($mh,$conn[$i]);//释放资源   
        } 
        curl_multi_close($mh); 
        return $res; 
    } 
}

php使用多线程下载类示例:下载远程图片

$curl_mul=new curl_multi(); 
$curl_mul->setUrlList(array(&#39; 
&#39;http://www.baidu.com/img/baidu_sylogo1.gif&#39;)); 
$a=$curl_mul->execute(); 
$i=1; 
foreach($a as $v){ 
    $filename=$i.&#39;.gif&#39;; 
    $fp2=@fopen($filename,&#39;a&#39;); 
    fwrite($fp2,$v); 
    fclose($fp2); 
    $i++; 
}

总结:

这篇文章给大家介绍了php利用curl实现多线程类的实例,以及php curl多线程下载图片实例,希望可以对工作有所帮助!

相关推荐:

实现php多线程类的案例


php实现异步调用多线程的方法


php多线程模拟实现的三种方法介绍


php多线程的实现实例

The above is the detailed content of Example of using PHP to implement multi-threaded classes using curl. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn