>  기사  >  백엔드 개발  >  빅파이프 컬php

빅파이프 컬php

WBOY
WBOY원래의
2016-07-30 13:30:59937검색

<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>

저작권: 이 글은 해당 블로거의 원본 글이므로 블로거의 허락 없이 복제할 수 없습니다.

위의 내용은 bigpipecurlphp의 내용을 포함하여 소개되어 있으며 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.