Bigpipe Curlphp

WBOY
WBOYOriginal
2016-07-30 13:30:59967Durchsuche

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

Urheberrechtserklärung: Dieser Artikel ist ein Originalartikel des Bloggers und darf nicht ohne die Erlaubnis des Bloggers reproduziert werden.

Das Obige stellt Bigpipe Curlphp vor, einschließlich einiger Aspekte davon. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn