首頁  >  文章  >  後端開發  >  大管道+curlphp

大管道+curlphp

WBOY
WBOY原創
2016-07-30 13:30:59936瀏覽

<code><span><span><?php</span><span><span>class</span><span>Multicurl</span>{</span><span>private</span><span>$param</span> = <span>array</span>();
    <span>private</span><span>$config</span>= <span>null</span>;

    <span>public</span><span><span>function</span><span>__construct</span><span>(<span>$param</span>)</span>{</span><span>$this</span>->param = array_merge(<span>$this</span>->param,<span>$param</span>);
    }

    <span>public</span><span><span>function</span><span>rolling_curl</span><span>()</span>{</span><span>$chs</span> = curl_multi_init();
        <span>foreach</span> (<span>$this</span>->param <span>as</span><span>$key</span> => <span>$value</span>) {
            <span>$ch</span> = curl_init();
            <span>$curl</span>=<span>"{$value}?id={$key}"</span>;
            curl_setopt(<span>$ch</span>, CURLOPT_URL,<span>"{$curl}"</span>);
            curl_setopt(<span>$ch</span>, CURLOPT_HEADER, <span>0</span>);
            curl_setopt(<span>$ch</span>, CURLOPT_RETURNTRANSFER, <span>1</span>);
            curl_multi_add_handle(<span>$chs</span>,<span>$ch</span>);
        }
        <span>do</span>{
            <span>if</span> ((<span>$status</span> = curl_multi_exec(<span>$chs</span>, <span>$active</span>)) != CURLM_CALL_MULTI_PERFORM) {
                <span>if</span> (<span>$status</span> != CURLM_OK) { <span>break</span>; } <span>//如果没有准备就绪,就再次调用curl_multi_exec</span><span>while</span> (<span>$done</span> = curl_multi_info_read(<span>$chs</span>)) {
                    <span>$info</span> = curl_getinfo(<span>$done</span>[<span>"handle"</span>]);
                    <span>$error</span> = curl_error(<span>$done</span>[<span>"handle"</span>]);
                    <span>$result</span> = curl_multi_getcontent(<span>$done</span>[<span>"handle"</span>]);
                    <span>echo</span><span>$result</span>;
                    curl_multi_remove_handle(<span>$chs</span>, <span>$done</span>[<span>'handle'</span>]);
                    curl_close(<span>$done</span>[<span>'handle'</span>]);
                    <span>if</span> (<span>$active</span> > <span>0</span>) {
                        curl_multi_select(<span>$chs</span>,<span>0.5</span>); <span>//此处会导致阻塞大概0.5秒。</span>
                    }
                }
            }
        }<span>while</span>(<span>$active</span>); <span>//还有句柄处理还在进行中</span>
    }

}
<span>?></span></span></span></code>
<code><span><span><?php</span><span><span>class</span><span>Singlecurl</span>{</span><span>private</span><span>$param</span> = <span>array</span>();
    <span>private</span><span>$config</span>= <span>null</span>;

    <span>public</span><span><span>function</span><span>__construct</span><span>(<span>$param</span>)</span>{</span><span>$this</span>->param = array_merge(<span>$this</span>->param,<span>$param</span>);      
    }
    <span>public</span><span><span>function</span><span>rolling_curl</span><span>()</span>{</span><span>foreach</span> (<span>$this</span>->param <span>as</span><span>$key</span> => <span>$value</span>) {
            <span>$ch</span> = curl_init();
            <span>$curl</span>=<span>"{$value}?id={$key}"</span>;
            curl_setopt(<span>$ch</span>, CURLOPT_URL,<span>"{$curl}"</span>);
            curl_setopt(<span>$ch</span>, CURLOPT_HEADER, <span>0</span>);
            curl_setopt(<span>$ch</span>, CURLOPT_RETURNTRANSFER, <span>1</span>);
            <span>$output</span> = curl_exec ( <span>$ch</span> );
            <span>echo</span><span>$output</span>;
            <span>$tim</span>=<span>"tim="</span>.microtime(<span>true</span>).<span>"\r\n"</span>;
            file_put_contents ( <span>"test.txt"</span> ,  <span>$tim</span> ,  FILE_APPEND|LOCK_EX );
        }
    }
}
<span>?></span></span></span></code>
<code><span><?</span>php
include_once (<span>"Multicurl.class.php"</span>);
<span>// include_once ("Singlecurl.class.php");</span><span>$body</span><span>=<<<</span>EOT
<span><!</span>DOCTYPE html<span>></span><span><</span>html lang<span>=</span><span>"en"</span><span>></span><span><</span>head<span>></span><span><</span>meta charset<span>=</span><span>"UTF-8"</span><span>></span><span><</span>title<span>></span><span>111</span><span><</span>/title<span>></span><span><</span>/head<span>></span><span><</span>script src<span>=</span><span>"http://libs.baidu.com/jquery/1.9.0/jquery.js"</span><span>><</span>/script<span>></span><span><</span>body<span>></span><span><</span>div id<span>=</span><span>"div1"</span><span>><</span>/div<span>></span><span><</span>div id<span>=</span><span>"div2"</span><span>><</span>/div<span>></span><span><</span>div id<span>=</span><span>"div3"</span><span>><</span>/div<span>></span><span><</span>/body<span>></span><span><</span>script<span>></span>
$(<span>"<link>"</span>)
    <span>.</span>attr({ rel: <span>"stylesheet"</span>,
        <span>type</span>: <span>"text/css"</span>,
        href: <span>"./inc/body.css"</span>
    })
    <span>.</span>appendTo(<span>"head"</span>);

$(<span>"<script>"</span>)
    <span>.</span>attr({src: <span>"./inc/body.js"</span>})
    <span>.</span>appendTo(<span>"head"</span>);
<span><</span>/script<span>></span>
EOT;

echo <span>$body</span>;

<span>$str_arr</span><span>=</span><span>array</span>(
    <span>"div1"</span><span>=></span><span>"http://localhost/curltest/1.php"</span>,
    <span>"div2"</span><span>=></span><span>"http://localhost/curltest/1.php"</span>,
    <span>"div3"</span><span>=></span><span>"http://localhost/curltest/1.php"</span>,
    );

<span>$test</span><span>=</span><span>new</span> Multicurl(<span>$str_arr</span>);
<span>// $test=new Singlecurl($str_arr);</span><span>$test</span><span>-></span>rolling_curl();
<span>?></span><span></span></code>

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。

以上就介紹了bigpipe+curlphp,包含了方面的內容,希望對PHP教程有興趣的朋友有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn