天天看點

php multi curl

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>&lt;?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>)&lt;=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=&gt;0, </code>

<code>CURLOPT_RETURNTRANSFER=&gt;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>=&gt;</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>=&gt; </code><code>$handle</code><code>){ </code>

<code>curl_multi_add_handle(</code><code>$mh</code><code>,</code><code>$handle</code><code>); </code>

<code>//echo "&lt;br&gt;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>&amp;&amp; </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 "&lt;br&gt;''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>=&gt;</code><code>array</code><code>(</code><code>"url"</code><code>=&gt;</code><code>"http://api.211.100.56.140.xip.io/shows.json/263?appKey=strKfLS2Hecp"</code><code>), </code>

<code>"12"</code><code>=&gt;</code><code>array</code><code>(</code><code>"url"</code><code>=&gt;</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>?&gt;</code>

本文轉自birdinroom 51CTO部落格,原文連結:http://blog.51cto.com/birdinroom/1550527,如需轉載請自行聯系原作者