加入收藏 | 设为首页 | 会员中心 | 我要投稿 天瑞地安资讯网_瑞安站长网 (https://www.ruian888.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php exec 通过网页

发布时间:2022-10-24 11:36:39 所属栏目:PHP教程 来源:
导读:  $reg1="/(.*?)/i";//获取视频链接

  $reg2="/

  ]*)\s*class=\"imgdetail\"\s*src=('|\")([^'\"]+)('|\")/i";

  $reg3="";

  $reg4= "/

  .*?/i";//获取视频标
  $reg1="/(.*?)/i";//获取视频链接
 
  $reg2="/
 
  ]*)\s*class=\"imgdetail\"\s*src=('|\")([^'\"]+)('|\")/i";
 
  $reg3="";
 
  $reg4= "/
 
  .*?/i";//获取视频标题(备选)
 
  // 创建两个cURL资源
 
  $ch1 = curl_init();
 
  $resultArray=array();//装载所有数据的数组
 
  $ch=array();
 
  //$ch2 = curl_init();
 
  // 指定URL和适当的参数
 
  curl_setopt($ch1, CURLOPT_URL,$url);
 
  curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
 
  curl_setopt($ch1, CURLOPT_HEADER, 0);
 
  $content=curl_exec($ch1);
 
  curl_close($ch1);
 
  //$content=file_get_contents($url);
 
  preg_match_all($reg1, $content,$matches);
 
  $video=$matches[0];//首页视频的链接
 
  //print_r($video);
 
  foreach ($video as $a=>$key)
 
  {
 
  $position=strpos($key, "href");
 
  $substring=substr($key, $position+11);
 
  $pos=strpos($substring, ">");
 
  $link=substr($substring, 0,$pos-1);
 
  $nextUrl[$a]=$url.$link;
 
  }
 
  //$url_array = array(
 
  // '#39;,
 
  // '#39;,
 
  //);
 
  //print_r($nextUrl);
 
  //print_r(async_get_url($nextUrl));
 
  //并发获取所有网页的内容
 
  $allData=async_get_url($nextUrl);
 
  foreach ($allData as $page)
 
  {
 
  //获取视频图片
 
  preg_match_all($reg2, $page,$img);
 
  $img_arr=$img[0];
 
  foreach ($img_arr as $arr)
 
  {
 
  $position=strpos($arr, "src");
 
  $sub=substr($arr, $position+5);
 
  $pos=strpos($sub, "\"");
 
  $last=substr($sub, 0,$pos);
 
  }
 
  //获取视频高清点播地址
 
  preg_match_all($reg3, $page,$vids);
 
  $video_arr=$vids[0];
 
  $vid=$video_arr[0];
 
  $position=strpos($vid, "href");
 
  $v_string=substr($vid, $position+11);
 
  $pos=strpos($v_string, "\"");
 
  $add=substr($v_string, 0,$pos);
 
  $video_url=$url.$add;
 
  //获取视频的标题
 
  preg_match_all($reg4, $page,$match);
 
  $title=$match[0];
 
  //print_r($er);
 
  $r=serialize($title);
 
  $position=mb_strpos($r, "");
 
  $sub=substr($r, 0,$position);
 
  $pos=mb_strrpos($sub, ">");
 
  $til=substr($sub, $pos+1);
 
  //整合到一个数组
 
  $subArray=array('image'=>$last,'video'=>$video_url,'title'=>$til);
 
  array_push($resultArray, $subArray);
 
  }
 
  echo json_encode($resultArray);
 
  重点在与async_get_url这个函数
 
  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);
 
  }
 
  }
 
  上面那段是重点也是难点。
 
  第一个循环,$mrc == CURLM_CALL_MULTI_PERFORM(-1)表明了还有句柄资源没有处 理php单线程,于是就继续$mrc = curl_multi_exec($mh, $active)
 
  要特别说明的是$mrc和$active都是integer类型的;
 
  当$mrc== CURLM_OK(0),就表明了还有资源,但还没有到达。
 
  这是就到第二个循环了:
 
  (while)要是有资源还没有到达
 
  (if)如果cURL批处理连接中有活动连接--也就是说句柄有事干了(具体可以参考php手册)
 
  (do-while)处理句柄资源
 
  curl并发处理因为官方文档比较简练,我自己也查了好多英文文档才略懂。
 
  希望大家能一起进步!
 

(编辑:天瑞地安资讯网_瑞安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!