-
- <?php
- /*
- * curl_multi 經測試,大于四個網址時要比Foreach循環快..
- * by wc1217
- * edit:bbs.it-home.org
- */
- class curl_multi{
- //Curl句柄
- //private $curl_handle = null;
- //網址
- private $url_list = array();
- //參數
- private $curl_setopt = array(
- 'CURLOPT_RETURNTRANSFER' => 1, //結果返回給變量
- 'CURLOPT_HEADER' => 0, //要HTTP頭不?
- 'CURLOPT_NOBODY' => 0, //不要內容?
- 'CURLOPT_FOLLOWLOCATION' => 0, //自動跟蹤
- 'CURLOPT_TIMEOUT' => 6//超時(s)
- );
-
- function __construct($seconds = 30){
- set_time_limit($seconds);
- }
-
- /*
- * 設置網址
- * @list 數組
- */
- public function setUrlList($list = array()){
- $this->url_list = $list;
- }
-
- /*
- * 設置參數
- * @cutPot array
- */
- public function setOpt($cutPot){
- $this->curl_setopt = $cutPot + $this->curl_setopt;
- }
-
- /*
- * 執行
- * @return array
- */
- public function exec(){
- $mh = curl_multi_init();
-
- foreach($this->url_list as $i => $url){
- $conn[$i] = curl_init($url);
-
- foreach($this->curl_setopt as $key => $val){
- curl_setopt($conn[$i], preg_replace('/(CURLOPT_\w{1,})/ie', '$0', $key), $val);
- }
- curl_multi_add_handle($mh, $conn[$i]);
- }
-
- $active = false;
-
- do{
- $mrc = curl_multi_exec($mh, $active);
- }while($mrc == CURLM_CALL_MULTI_PERFORM);
-
- while($active and $mrc == CURLM_OK){
- if(curl_multi_select($mh) != -1){
- do{
- $mrc = curl_multi_exec($mh, $active);
- }while($mrc == CURLM_CALL_MULTI_PERFORM);
- }
- }
-
- $res = array();
- foreach($this->url_list as $i => $url){
- $res[$i] = curl_multi_getcontent($conn[$i]);
- curl_close($conn[$i]);
- curl_multi_remove_handle($mh, $conn[$i]); //用完馬上釋放資源
- }
- curl_multi_close($mh);
- return $res;
- }
- }
- ?>
復制代碼 |
總結
以上是生活随笔為你收集整理的php curl批量打开网址(curl_multi类)的实现代码(thinkphp)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。