国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP多線程類及用法實例

2024-05-04 23:28:30
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP多線程類及用法,實例分析了多線程類的具體實現方法及應用技巧,并結合下載遠程圖片的實例予以深入分析,需要的朋友可以參考下
 
 

本文實例講述了PHP多線程類及用法。分享給大家供大家參考。具體分析如下:

一般來說可通過WEB服務器來實現PHP多線程功能,當然,對多線程有深入理解的人都知道通過WEB服務器實現的多線程只能模仿多線程的一些效果,并不是真正意義上的多線程.

但不管怎么樣,它還是能滿足我們的一些需要的,在需要類似多線程的功能方面還是可以采用這個類,代碼如下:

復制代碼代碼如下:
/** 
* @title: PHP多線程類(Thread) 
* @version: 1.0 

* PHP多線程應用示例: 
* require_once 'thread.class.php'; 
* $thread = new thread(); 
* $thread->addthread('action_log','a'); 
* $thread->addthread('action_log','b'); 
* $thread->addthread('action_log','c'); 
* $thread->runthread(); 

* function action_log($info) { 
* $log = 'log/' . microtime() . '.log'; 
* $txt = $info . "rnrn" . 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn"; 
* $fp = fopen($log, 'w'); 
* fwrite($fp, $txt); 
* fclose($fp); 
* } 
*/ 
class thread { 
var $hooks = array(); 
var $args = array(); 
function thread() { 

function addthread($func) 

$args = array_slice(func_get_args(), 1); 
$this->hooks[] = $func; 
$this->args[] = $args; 
return true; 

function runthread() 

if(isset($_GET['flag'])) 

$flag = intval($_GET['flag']); 

if($flag || $flag === 0) 

call_user_func_array($this->hooks[$flag], $this->args[$flag]); 

else 

for($i = 0, $size = count($this->hooks); $i < $size; $i++) 

$fp=fsockopen($_SERVER['HTTP_HOST'],$_SERVER['SERVER_PORT']); 
if($fp) 

$out = "GET {$_SERVER['PHP_SELF']}?flag=$i HTTP/1.1rn"; 
$out .= "Host: {$_SERVER['HTTP_HOST']}rn"; 
$out .= "Connection: Closernrn"; 
fputs($fp,$out); 
fclose($fp); 




}

使用方法,代碼如下:
復制代碼代碼如下:
$thread = new thread(); 
$thread->addthread('func1','info1'); 
$thread->addthread('func2','info2'); 
$thread->addthread('func3','info3'); 
$thread->runthread();

說明:

 

addthread() 是添加線程函數,第一個參數是函數名,之后的參數(可選)為傳遞給指定函數的參數.

runthread() 是執行線程的函數.

PHP實例:利用curl實現多線程下載圖片

其實是php利用curl實現的一個多線程類,有了這個類,我們也可利用該類執行多線程任務了,代碼如下:

復制代碼代碼如下:
class curl_multi{  
    private $url_list=array();  
    private $curl_setopt=array(  
        'CURLOPT_RETURNTRANSFER' => 1,//結果返回給變量  
        'CURLOPT_HEADER' => 0,//是否需要返回HTTP頭  
        'CURLOPT_NOBODY' => 0,//是否需要返回的內容  
        'CURLOPT_FOLLOWLOCATION' => 0,//自動跟蹤  
        'CURLOPT_TIMEOUT' => 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('/(CURLOPT_w{1,})/ie','$0',$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('http://m.survivalescaperooms.com/img/logo.jpg','http://m.survivalescaperooms.com/img/logo.jpg','http://m.survivalescaperooms.com/img/logo.jpg'));  
$a=$curl_mul->execute();  
$i=1;  
foreach($a as $v){  
        $filename=$i.'.gif';  
        $fp2=@fopen($filename,'a');  
        fwrite($fp2,$v);  
        fclose($fp2);  
        $i++;  
}

 

希望本文所述對大家的PHP程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 澄城县| 德江县| 长寿区| 织金县| 安徽省| 三台县| 海原县| 东乌珠穆沁旗| 灵川县| 蓬安县| 永胜县| 湘潭县| 黑水县| 公安县| 桃源县| 博野县| 勐海县| 澎湖县| 剑河县| 张家港市| 苏尼特右旗| 永修县| 类乌齐县| 射阳县| 西畴县| 兴仁县| 南岸区| 得荣县| 武穴市| 成都市| 虞城县| 宜都市| 玉田县| 台中市| 夏河县| 南阳市| 囊谦县| 博客| 白朗县| 枣强县| 大竹县|