国产探花免费观看_亚洲丰满少妇自慰呻吟_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://www.survivalescaperooms.com/img/logo.jpg','http://www.survivalescaperooms.com/img/logo.jpg','http://www.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程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辽阳市| 海原县| 根河市| 赤城县| 德庆县| 鄂托克前旗| 济阳县| 南皮县| 淮安市| 文安县| 万荣县| 根河市| 罗田县| 镇江市| 松溪县| 宣武区| 江城| 蕉岭县| 巧家县| 安化县| 镇宁| 黄龙县| 内江市| 平安县| 门源| 徐州市| 湘潭市| 闸北区| 错那县| 伽师县| 南乐县| 亳州市| 清徐县| 定南县| 嘉荫县| 郁南县| 茂名市| 阜平县| 兰溪市| 恩施市| 平利县|