PHP利用CURL MULTI實現多執行緒

2022-04-12 16:32:30 字數 3340 閱讀 9528

php中的curl_multi一類函式可以實現同時請求多個url,而不是乙個乙個依次請求,這就類似乙個程序實現了多個執行緒的功能,因此可以使用php利用curl_multi實現完成多執行緒類的任務,下面就乙個利用php curl_multi多執行緒採集網頁為例來說明一下。

檢視**

列印01

<?php

02

//功能:php利用curl_multi多執行緒採集網頁函式

03

$text=remote(array('','','',''));

04

print_r($text);

05

functionremote($urls)

09

$curl=$text=array();

10

$handle=curl_multi_init();

11

foreach($urlsas$k=>$v)

19

$active= null;

20

dowhile($mrc==curlm_call_multi_perform);

23

while($active&&$mrc==curlm_ok)while($mrc==curlm_call_multi_perform);

28

}

29

}

30

31

foreach($curlas$k=>$v)

35

curl_multi_remove_handle($handle,$curl[$k]);

36

curl_close($curl[$k]);

37

}

38

curl_multi_close($handle);

39

return$text;

40

}

另外我對curl_multi類的函式也做了一下小小的總結,通過檢視php手冊文件會找出php curl_multi類的函式主要有以下幾個:

curl_multi_add_handle

curl_multi_close

curl_multi_exec

curl_multi_getcontent

curl_multi_info_read

curl_multi_init

curl_multi_remove_handle

curl_multi_select

呼叫這些函式實現目的的步驟一般如下:

第一步:呼叫curl_multi_init初始化乙個curl批處理控制代碼資源

第二步:迴圈呼叫curl_multi_add_handle向curl批處理會話中新增單獨的curl控制代碼資源(這一步需要注意的是,curl_multi_add_handle的第二個引數是由curl_init而來的子handle)

第三步:持續呼叫curl_multi_exec解析curl批處理控制代碼

第四步:根據需要迴圈呼叫curl_multi_getcontent返回獲取的輸出的文字流以獲取結果

第五步:呼叫curl_multi_remove_handle移除curl批處理控制代碼資源中的某個控制代碼資源,並為每個handle呼叫curl_close

第六步:呼叫curl_multi_close關閉批處理控制代碼資源

另外需要注意的是php 5 版本才可以使用這個函式,必須開啟 curl 擴充套件(開啟 php.ini 把;extension=php_curl.dll前面的分號去掉 , 重啟apache  就可以使用了)。

php利用curl multi 函式實現非同步請求

這是php官方示例的用curl實現併發請求的 create both curl resources ch1 curl init ch2 curl init curl setopt ch1,curlopt url,curl setopt ch1,curlopt header,0 curl setopt...

PHP利用CURL MULTI實現多執行緒爆破

第二天我通過各種網路搜尋又搞出了乙個更快的方法,使用curl multi這個東西我在網路上也沒看懂到底是怎麼回事,但是網上的文章都千篇一律,全是copy的,我也就依葫蘆畫瓢,拼拼湊湊勉強能夠執行,先貼出 function fn function writelog str if post nums a...

PHP使用curl multi併發請求

輪詢 do 一旦有乙個請求完成,找出來,處理,因為curl底層是select,所以最大受限於1024 while done curl multi info read 當沒有資料的時候進行堵塞,把 cpu 使用權交出來,避免上面 do 死迴圈空跑資料導致 cpu 100 if running if r...