首頁  >  文章  >  後端開發  >  php使用curl模擬多執行緒發送請求的程式碼範例

php使用curl模擬多執行緒發送請求的程式碼範例

不言
不言轉載
2018-11-17 17:19:252155瀏覽

這篇文章帶給大家的內容是關於php使用curl模擬多執行緒發送請求的程式碼範例,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

每個PHP檔案的執行是單執行緒的,但是php本身也可以用一些別的技術實作多執行緒並發例如用php-fpm進程,這裡用curl模擬多執行緒傳送請求。 php的curl多執行緒是透過不斷呼叫curl_multi_exec來取得內容,這裡舉一個demo來模擬一次curl多執行緒並發操作。

//设置缓冲为0(也可以去php.ini设置)
ini_set('output_buffering', 0);
//打开输出缓冲区
ob_start();
//设置一个空数组
$curl_Arr=[];
//这里模拟20次请求
for($i=0;$i<20;$i++){
    //开启curl连接
    $curl_Arr[$i]=curl_init("http://XXXX/test.php");
    //CURLOPT_RETURNTRANSFER 设置为1表示稍后执行的curl_exec函数的返回是URL的返回字符串,而不是把返回字符串定向到标准输出并返回TRUE;
    curl_setopt($curl_Arr[$i],CURLOPT_RETURNTRANSFER,1);
}

//创建批处理cURL句柄
$mh = curl_multi_init();

foreach($curl_Arr as $k => $ch){
    //curl句柄入栈增加
    curl_multi_add_handle($mh,$ch);
}
$active = null;
while(count($curl_Arr)>0){
    //发起curl_multi请求
    @curl_multi_exec($mh,$active);
    foreach($curl_Arr as $k => $ch){
        //获取句柄的返回值
        if($result[$k]= curl_multi_getcontent($ch)){
            //输出结果
            echo "$result[$k]\n";
            ob_flush();
            //把被释放的数据发送到浏览器
            flush();
            //关闭该句柄
            curl_multi_remove_handle($mh,$ch);
            unset($curl_Arr[$k]);
        }
    }
}
//关闭ouput_buffering机制
ob_end_flush();
//关闭"curl_mulit"句柄
curl_multi_close($mh);

我再伺服器上建立一起請求的php頁面命名為test.php,內容如下

##

1 sleep(10);
2 echo &#39;seccess&#39;;exit;

表示等待十秒後資料下面語句。

然後我在命令列執行該程式結果如下:

#上面程式碼中透過循環$curl_Arr數組來呼叫curl_multi_getcontent來查詢是否有資料。有資料就輸出並刪除元素,直到$curl_Arr數組元素個數為0。

此模擬多執行緒實作是透過使用curl的curl_multi系列函數能實現此功能的。至於此系列函數使用介紹,百度一搜一大把。這裡就不做說明了。

以上是php使用curl模擬多執行緒發送請求的程式碼範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除