php exec 通过网页
发布时间:2022-10-24 11:36:39 所属栏目:PHP教程 来源:
导读: $reg1="/(.*?)/i";//获取视频链接
$reg2="/
]*)\s*class=\"imgdetail\"\s*src=('|\")([^'\"]+)('|\")/i";
$reg3="";
$reg4= "/
.*?/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并发处理因为官方文档比较简练,我自己也查了好多英文文档才略懂。 希望大家能一起进步! (编辑:天瑞地安资讯网_瑞安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐

