日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

解讀PHP如何使用 CURL 同步抓取多個(gè)網(wǎng)頁(yè)_PHP教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:淺談PHP 閉包特性在實(shí)際應(yīng)用中的問題
原文鏈接: http://justafewlines.com/2009/10/whats-wrong-with-php-closures/ PHP5.3 新版本跟隨了很多新特性, 其中比較惹眼的特性之一就是支持了閉包。那么以后,我們也可以和那幫寫 Ruby、Javascript 等等高科技語(yǔ)言的家伙們一樣,寫出非�?岬拇a嗎?

一般CURL 抓網(wǎng)頁(yè)的方法, 是一頁(yè)一頁(yè)抓, 假設(shè)要抓 4頁(yè), 所費(fèi)時(shí)間各別是 5,10,7,5 秒, 那全部總合所花的時(shí)間就是 5 + 10 + 7 + 5 = 27 秒。若能同時(shí)間去抓取多個(gè)網(wǎng)頁(yè), 所花費(fèi)的時(shí)間 5,10,7,5 秒, 全部總合所花的時(shí)間是 10 秒。(花費(fèi)最多時(shí)間的秒數(shù))于JavaScript 可使用 AJAX 的 async(YAHOO.util.Connect.asyncRequest)來(lái)達(dá)成, 于 PHP 可以用 CURL 來(lái)達(dá)成此 Multi-Threading 的效果。程序(async.php)

以下為引用的內(nèi)容:
<?php
function async_get_url($url_array, $wait_usec = 0)
{
    if (!is_array($url_array))
        return false;

    $wait_usec = intval($wait_usec);

    $data    = array();
    $handle  = array();
    $running = 0;

    $mh = curl_multi_init(); // multi curl handler

    $i = 0;
    foreach($url_array as $url) {
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return don't print
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 302 redirect
        curl_setopt($ch, CURLOPT_MAXREDIRS, 7);

        curl_multi_add_handle($mh, $ch); // 把 curl resource 放進(jìn) multi curl handler 里

        $handle[$i++] = $ch;
    }

    /* 執(zhí)行 */
    do {
        curl_multi_exec($mh, $running);

        if ($wait_usec > 0) /* 每個(gè) connect 要間隔多久 */
            usleep($wait_usec); // 250000 = 0.25 sec
    } while ($running > 0);

    /* 讀取資料 */
    foreach($handle as $i => $ch) {
        $content  = curl_multi_getcontent($ch);
        $data[$i] = (curl_errno($ch) == 0) ? $content : false;
    }

    /* 移除 handle*/
    foreach($handle as $ch) {
        curl_multi_remove_handle($mh, $ch);
    }

    curl_multi_close($mh);

    return $data;
}
?>

使用

以下為引用的內(nèi)容:
<?php
$urls = array('http://example1.com', 'http://example2.com');
print_r(async_get_url($urls)); // [0] => example1, [1] => example2
?>

測(cè)試

sleep.php # 看時(shí)間延長(zhǎng)取得的效果

以下為引用的內(nèi)容:
<?php
sleep(intval($_GET['time']));
echo intval($_GET['time']);
?>

以下為引用的內(nèi)容:
<?php
$url_array = array(
        'http://example.com/sleep.php?time=5',
        'http://example.com/sleep.php?time=10',
        'http://example.com/sleep.php?time=7',
        'http://example.com/sleep.php?time=5',
        );
print_r(async_get_url($url_array));
// 總花費(fèi)時(shí)間會(huì)是 10 秒, 并印出 [0] => 5, [1] => 10, [2] => 7, [3] => 5
?>

 

分享:解說(shuō)PHP中插件機(jī)制的一種實(shí)現(xiàn)方案
這篇文章的出發(fā)點(diǎn)是我對(duì)插件機(jī)制的理解,及其在PHP中的實(shí)現(xiàn)。此方案僅是插件機(jī)制在PHP中的實(shí)現(xiàn)方案之一,寫下來(lái)和大家分享,歡迎大家一起討論。 插件,亦即Plug-in,是指一類特定的功能模塊(通常由第三方開發(fā)者實(shí)現(xiàn)),它的特點(diǎn)是:當(dāng)你需要它的時(shí)候激活它

來(lái)源:模板無(wú)憂//所屬分類:PHP教程/更新時(shí)間:2009-11-16
相關(guān)PHP教程