1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<code><?php </code>
<code>function</code> <code>multiCurl(</code><code>$res</code><code>,</code><code>$options</code><code>=</code><code>""</code><code>){ </code>
<code>if</code><code>(</code><code>count</code><code>(</code><code>$res</code><code>)<=0) </code><code>return</code> <code>False; </code>
<code>$handles</code> <code>= </code><code>array</code><code>(); </code>
<code>if</code><code>(!</code><code>$options</code><code>) </code><code>// add default options </code>
<code>$options</code> <code>= </code><code>array</code><code>( </code>
<code>CURLOPT_HEADER=>0, </code>
<code>CURLOPT_RETURNTRANSFER=>1, </code>
<code>); </code>
<code>// add curl options to each handle </code>
<code>foreach</code><code>(</code><code>$res</code> <code>as</code> <code>$k</code><code>=></code><code>$row</code><code>){ </code>
<code>$ch</code><code>{</code><code>$k</code><code>} = curl_init(); </code>
<code>$options</code><code>[CURLOPT_URL] = </code><code>$row</code><code>[</code><code>'url'</code><code>]; </code>
<code>curl_setopt_array(</code><code>$ch</code><code>{</code><code>$k</code><code>}, </code><code>$options</code><code>); </code>
<code>$handles</code><code>[</code><code>$k</code><code>] = </code><code>$ch</code><code>{</code><code>$k</code><code>}; </code>
<code>} </code>
<code>$mh</code> <code>= curl_multi_init(); </code>
<code>foreach</code><code>(</code><code>$handles</code> <code>as</code> <code>$k</code> <code>=> </code><code>$handle</code><code>){ </code>
<code>curl_multi_add_handle(</code><code>$mh</code><code>,</code><code>$handle</code><code>); </code>
<code>//echo "<br>adding handle {$k}"; </code>
<code>$running_handles</code> <code>= null; </code>
<code>//execute the handles </code>
<code>$cme</code><code>=null;</code>
<code>$status</code><code>=null;</code>
<code>do</code> <code>{ </code>
<code>$status_cme</code> <code>= curl_multi_exec(</code><code>$mh</code><code>, </code><code>$running_handles</code><code>); </code>
<code>} </code><code>while</code> <code>(</code><code>$cme</code> <code>== CURLM_CALL_MULTI_PERFORM); </code>
<code>while</code> <code>(</code><code>$running_handles</code> <code>&& </code><code>$status_cme</code> <code>== CURLM_OK) { </code>
<code>if</code> <code>(curl_multi_select(</code><code>$mh</code><code>) != -1) { </code>
<code>// echo "<br>''threads'' running = {$running_handles}"; </code>
<code>} </code><code>while</code> <code>(</code><code>$status</code> <code>== CURLM_CALL_MULTI_PERFORM); </code>
<code>$res</code><code>[</code><code>$k</code><code>][</code><code>'error'</code><code>] = curl_error(</code><code>$handles</code><code>[</code><code>$k</code><code>]); </code>
<code>if</code><code>(!</code><code>empty</code><code>(</code><code>$res</code><code>[</code><code>$k</code><code>][</code><code>'error'</code><code>])) </code>
<code>$res</code><code>[</code><code>$k</code><code>][</code><code>'data'</code><code>] = </code><code>''</code><code>; </code>
<code>else</code>
<code>$res</code><code>[</code><code>$k</code><code>][</code><code>'data'</code><code>] = curl_multi_getcontent( </code><code>$handles</code><code>[</code><code>$k</code><code>] ); </code><code>// get results </code>
<code>// close current handler </code>
<code>curl_multi_remove_handle(</code><code>$mh</code><code>, </code><code>$handles</code><code>[</code><code>$k</code><code>] ); </code>
<code>curl_multi_close(</code><code>$mh</code><code>); </code>
<code>return</code> <code>$res</code><code>; </code><code>// return response </code>
<code>$res</code> <code>= </code><code>array</code><code>( </code>
<code>"11"</code><code>=></code><code>array</code><code>(</code><code>"url"</code><code>=></code><code>"http://api.211.100.56.140.xip.io/shows.json/263?appKey=strKfLS2Hecp"</code><code>), </code>
<code>"12"</code><code>=></code><code>array</code><code>(</code><code>"url"</code><code>=></code><code>"http://api.211.100.56.140.xip.io/shows.json/263?appKey=strKfLS2Hecp"</code><code>), </code>
<code>print_r(multiCurl(</code><code>$res</code><code>)); </code>
<code>?></code>
本文轉自birdinroom 51CTO部落格,原文連結:http://blog.51cto.com/birdinroom/1550527,如需轉載請自行聯系原作者