最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP多線程之內(nèi)部多線程實例分析

 更新時間:2015年03月09日 10:00:55   作者:瘋狂的流浪  
這篇文章主要介紹了PHP多線程之內(nèi)部多線程,實例分析了php多線程的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例分析了PHP多線程之內(nèi)部多線程用法。分享給大家供大家參考。具體如下:

復(fù)制代碼 代碼如下:
<?php
class Http_MultiRequest
{
    //要并行抓取的url 列表
    private $urls = array();
    //curl 的選項
    private $options;
    //構(gòu)造函數(shù)
    function __construct($options = array())
    {
        $this->setOptions($options);
    }
    //設(shè)置url 列表
    function setUrls($urls)
    {
        $this->urls = $urls;
        return $this;
    }
    //設(shè)置選項
    function setOptions($options)
    {
        $options[CURLOPT_RETURNTRANSFER] = 1;
        if (isset($options['HTTP_POST']))
        {
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $options['HTTP_POST']);
            unset($options['HTTP_POST']);
        }
        if (!isset($options[CURLOPT_USERAGENT]))
        {
            $options[CURLOPT_USERAGENT] = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;)';
        }
        if (!isset($options[CURLOPT_FOLLOWLOCATION]))
        {
            $options[CURLOPT_FOLLOWLOCATION] = 1;
        }
        if (!isset($options[CURLOPT_HEADER]))
        {
            $options[CURLOPT_HEADER] = 0;
        }
        $this->options = $options;
    }
    //并行抓取所有的內(nèi)容
    function exec()
    {
        if(empty($this->urls) || !is_array($this->urls))
        {
            return false;
        }
        $curl = $data = array();
        $mh = curl_multi_init();
        foreach($this->urls as $k => $v)
        {
            $curl[$k] = $this->addHandle($mh, $v);
        }
        $this->execMulitHandle($mh);
        foreach($this->urls as $k => $v)
        {
            $data[$k] = curl_multi_getcontent($curl[$k]);
            curl_multi_remove_handle($mh, $curl[$k]);
        }
        curl_multi_close($mh);
        return $data;
    }
    //只抓取一個網(wǎng)頁的內(nèi)容。
    function execOne($url)
    {
        if (empty($url)) {
            return false;
        }
        $ch = curl_init($url);
        $this->setOneOption($ch);
        $content = curl_exec($ch);
        curl_close($ch);
        return $content;
    }
    //內(nèi)部函數(shù),設(shè)置某個handle 的選項
    private function setOneOption($ch)
    {
        curl_setopt_array($ch, $this->options);
    }
    //添加一個新的并行抓取 handle
    private function addHandle($mh, $url)
    {
        $ch = curl_init($url);
        $this->setOneOption($ch);
        curl_multi_add_handle($mh, $ch);
        return $ch;
    }
    //并行執(zhí)行(這樣的寫法是一個常見的錯誤,我這里還是采用這樣的寫法,這個寫法
    //下載一個小文件都可能導(dǎo)致cup占用100%, 并且,這個循環(huán)會運行10萬次以上
    //這是一個典型的不懂原理產(chǎn)生的錯誤。這個錯誤在PHP官方的文檔上都相當?shù)某R?。?br />     private function execMulitHandle($mh)
    {
        $running = null;
        do {
            curl_multi_exec($mh, $running);
        } while ($running > 0);
    }
}
/*下面是上面的類的一個測試的例子:*/
$urls = array("http://baidu.com", "http://baidu.com", "http://baidu.com", "http://baidu.com", "http://baidu.com", "http://baidu.com", "http://www.google.com", "http://www.sina.com.cn", );
$m = new Http_MultiRequest();
$t = microtime(true);
$m->setUrls($urls);
//parallel fetch(并行抓?。?
$data = $m->exec();
$parallel_time = microtime(true) - $t;
echo $parallel_time . "\n";
$t = microtime(true);
//serial fetch(串行抓?。?
foreach ($urls as $url)
{
    $data[] = $m->execOne($url);
}
$serial_time = microtime(true) - $t;
echo $serial_time . "\n";

希望本文所述對大家的php程序設(shè)計有所幫助。

相關(guān)文章

  • php限制文件下載速度的代碼

    php限制文件下載速度的代碼

    這篇文章主要介紹了php限制文件下載速度的代碼,配有詳細的代碼分析,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • PHP實現(xiàn)基于文本的簡易搜索引擎功能

    PHP實現(xiàn)基于文本的簡易搜索引擎功能

    這篇文章給大家介紹了PHP實現(xiàn)基于文本的簡易搜索引擎功能,讓這個功能可以在小型網(wǎng)站或者特定數(shù)據(jù)集內(nèi)提供快速的關(guān)鍵字搜索能力,非常適合沒有使用復(fù)雜數(shù)據(jù)庫搜索引擎(如Elasticsearch)的場景,需要的朋友可以參考下
    2024-02-02
  • PHP實現(xiàn)事件機制的方法

    PHP實現(xiàn)事件機制的方法

    這篇文章主要介紹了PHP實現(xiàn)事件機制的方法,實例分析了php針對事件機制的定義與實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • PHP統(tǒng)計目錄下的文件總數(shù)及代碼行數(shù)(去除注釋及空行)

    PHP統(tǒng)計目錄下的文件總數(shù)及代碼行數(shù)(去除注釋及空行)

    在開發(fā)的時候,為了統(tǒng)計開發(fā)出的代碼總行數(shù)及文件總數(shù),在沒有使用工具的時候,總是要去一個文件一個文件的查找,文件夾層次少還行,層次多的時候就累死人了
    2011-01-01
  • PHP使用mysqldump命令導(dǎo)出數(shù)據(jù)庫

    PHP使用mysqldump命令導(dǎo)出數(shù)據(jù)庫

    最近用php寫一個數(shù)據(jù)備份的功能。做法是使用php的system函數(shù)執(zhí)行mysqldump命令,進行備份,這里分享給大家,有需要的小伙伴可以參考下。
    2015-04-04
  • 11個PHPer必須要了解的編程規(guī)范

    11個PHPer必須要了解的編程規(guī)范

    從設(shè)計之初,PHP被廣泛用于開發(fā)基于Web的應(yīng)用程序。 由于PHP是一種腳本語言,開發(fā)的時候必須遵守一些規(guī)范。
    2014-09-09
  • php 中self,this的區(qū)別和操作方法實例分析

    php 中self,this的區(qū)別和操作方法實例分析

    這篇文章主要介紹了php 中self,this的區(qū)別和操作方法,結(jié)合實例形式分析了PHP面向?qū)ο蟪绦蛟O(shè)計中self,this的功能、區(qū)別、使用方法與操作注意事項,需要的朋友可以參考下
    2019-11-11
  • PHP二維數(shù)組分頁2種實現(xiàn)方法解析

    PHP二維數(shù)組分頁2種實現(xiàn)方法解析

    這篇文章主要介紹了PHP二維數(shù)組分頁2種實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • PHP?Array?數(shù)組詳細介紹

    PHP?Array?數(shù)組詳細介紹

    這篇文章主要介紹了PHP?Array數(shù)組詳細介紹,PHP中的array實際上是一個有序映射。映射是一種把?values?關(guān)聯(lián)到keys的類型,更多詳情需要的小伙伴可以參考一下
    2022-09-09
  • PHP 5.3.1 安裝包 VC9 VC6不同版本的區(qū)別是什么

    PHP 5.3.1 安裝包 VC9 VC6不同版本的區(qū)別是什么

    php官網(wǎng)提供了四個版本,VC9 x86 Non Thread Safe、VC9 x86 Thread Safe、VC6 x86 Non Thread Safe、VC6 x86 Thread Safe,大家看完這篇文章就知道應(yīng)該選擇什么樣的版本了。
    2010-07-07

最新評論

石棉县| 黄冈市| 宜昌市| 夏邑县| 廉江市| 兴义市| 裕民县| 中阳县| 河津市| 中西区| 姜堰市| 宁阳县| 林甸县| 千阳县| 红原县| 松桃| 施秉县| 博兴县| 英吉沙县| 塔城市| 临邑县| 山阴县| 绵竹市| 兴隆县| 浮梁县| 册亨县| 揭阳市| 乐都县| 苏尼特左旗| 怀柔区| 白城市| 横峰县| 隆德县| 贵阳市| 云南省| 闵行区| 大冶市| 亳州市| 柳林县| 布拖县| 清苑县|