這篇文章帶給大家的內容是關於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 'seccess';exit;表示等待十秒後資料下面語句。 然後我在命令列執行該程式結果如下: #上面程式碼中透過循環$curl_Arr數組來呼叫curl_multi_getcontent來查詢是否有資料。有資料就輸出並刪除元素,直到$curl_Arr數組元素個數為0。 此模擬多執行緒實作是透過使用curl的curl_multi系列函數能實現此功能的。至於此系列函數使用介紹,百度一搜一大把。這裡就不做說明了。
以上是php使用curl模擬多執行緒發送請求的程式碼範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!