>백엔드 개발 >PHP 튜토리얼 >일괄적으로 URL을 열기 위한 PHP 컬의 구현 코드(curl_multi 클래스)

일괄적으로 URL을 열기 위한 PHP 컬의 구현 코드(curl_multi 클래스)

WBOY
WBOY원래의
2016-07-25 08:55:051962검색
  1. /*
  2. * curl_multi 经测试,大于四个网址时要比Foreach循环快..
  3. * by wc1217
  4. * edit:bbs.it-home.org
  5. */
  6. class curl_multi{
  7. //Curl句柄
  8. //private $curl_handle = null;
  9. //网址
  10. private $url_list = array();
  11. //参数
  12. private $curl_setopt = array(
  13. 'CURLOPT_RETURNTRANSFER' => 1, //结果返回给变量
  14. 'CURLOPT_HEADER' => 0, //要HTTP头不?
  15. 'CURLOPT_NOBODY' => 0, //不要内容?
  16. 'CURLOPT_FOLLOWLOCATION' => 0, //自动跟踪
  17. 'CURLOPT_TIMEOUT' => 6//超时(s)
  18. );
  19. function __construct($seconds = 30){
  20. set_time_limit($seconds);
  21. }
  22. /*
  23. * 设置网址
  24. * @list 数组
  25. */
  26. public function setUrlList($list = array()){
  27. $this->url_list = $list;
  28. }
  29. /*
  30. * 设置参数
  31. * @cutPot array
  32. */
  33. public function setOpt($cutPot){
  34. $this->curl_setopt = $cutPot $this->curl_setopt;
  35. }
  36. /*
  37. * 执行
  38. * @return array
  39. */
  40. public function exec(){
  41. $mh = curl_multi_init();
  42. foreach($this->url_list as $i => $url){
  43. $conn[$i] = curl_init($url);
  44. foreach($this->curl_setopt as $key => $val){
  45. curl_setopt($conn[$i], preg_replace('/(CURLOPT_w{1,})/ie', '
', $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;
  • }
  • }
  • ?>
  • 复制代码


    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.