博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php多线程thread开发与应用的例子
阅读量:6651 次
发布时间:2019-06-25

本文共 3155 字,大约阅读时间需要 10 分钟。

Php多线程的使用,首先需要PHP5.3以上版本,并安装pthreads PHP扩展,可以使PHP真正的支持多线程,扩展如何安装请自行百度

PHP扩展下载:htt://github.com/krakjoe/pthreads

PHP手册文档:http://php.net/manual/zh/book.pthreads.php

在安装好扩展之后,就可以运用多线程了,下面贴个通过搜索结果抓取百度网盘内容的代码:

start (); } foreach ( $thread_array as $thread_array_key => $thread_array_value ) {
//检查线程是否执行结束 while ( $thread_array [$thread_array_key]->isRunning () ) { usleep ( 10 ); } if ($thread_array [$thread_array_key]->join ()) {
//如果执行结束,取出结果 $temp = $thread_array [$thread_array_key]->data; if ($temp != null) $infos ['res'] [] = $temp; } } $infos ['pages'] = $ret ['pages']; $infos ['status'] = "1"; } else $infos = null; } else $infos = null; return $infos;}/** * 获取百度搜索结果列表URL * * @param string $url * 搜索结果页URL * @param int $format * 默认$format=0,获取默认地址;$format=1获取跳转后真实地址 * @return NULL multitype:array() */function BaiduSRLinksGet($url, $format = 0) { $html = CurlLoad::HtmlGet ( $url ); // 获取页面 if ($html == null) return null; try { preg_match_all ( "/"url":"(?
.*)"}/", $html, $rets ); // 搜索结果链接筛选 if (! array_key_exists ( 'links', $rets )) // 如果数组中不包含Links键名,表示获取失败 return null; $ret = array (); if ($format == 1) { $number = count ( $rets ['links'] ); for($i = 0; $i < $number; $i ++) { $headr_temp = CurlLoad::Get_Headers ( $rets ['links'] [$i], 1 ); // 通过headr获取真实地址 if (array_key_exists ( "Location", $headr_temp )) $ret ['links'] [$i] = $headr_temp ['Location']; else $ret ['links'] = $rets ['links']; } } else $ret ['links'] = $rets ['links']; preg_match_all ( '/href="?/s?wd=site%3Apan.baidu.com%20(?
.+?)&ie=utf-8">/', $html, $out ); unset ( $out ['url'] [0] ); $number = count ( $out ['url'] ); for($i = 1; $i < $number; $i ++) { preg_match_all ( '/&pn=(.*)/', $out ['url'] [$i], $temp ); $ret ['pages'] [$temp [1] [0] / 10] = base64_encode ( $out ['url'] [$i] ); } return $ret; } catch ( Exception $e ) { WriteLog ( $e ); return null; }}/** * 百度网盘资源信息获取 * * @param string $url * 网盘资源页URL * @return NULL array */function PanInfoGet($url) { $html = CurlLoad::HtmlGet ( $url ); // 获取页面 if ($html == null) return null; try { if (preg_match_all ( "/文件名:(?
.*) 文件大小:(?
.*) 分享者:(?
.*) 分享时间:(?
.*) 下载次数:(?
[0-9]+)/", $html, $ret ) == 0) return null; $rets ['name'] = $ret ['name'] [0]; $rets ['size'] = $ret ['size'] [0]; $rets ['user'] = $ret ['user'] [0]; $rets ['date'] = $ret ['date'] [0]; $rets ['number'] = $ret ['number'] [0]; $rets ['link'] = $url; return $rets; } catch ( Exception $e ) { WriteLog ( $e ); return null; }}function WriteLog($str) { $file = fopen ( "../error.log", "a+" ); fwrite ( $file, "Warning:" . date ( "Y/m/d H:i:s" ) . ":" . $str . "rn" ); fclose ( $file );}/** * 多线程抓取对象 * @author MuXi * */class baidu_thread_run extends Thread { public $url; public $data; public function __construct($url) { $this->url = $url; } public function run() { if (($url = $this->url)) { $this->data = PanInfoGet ( $url );//线程执行方法 } }}?>

 

转载于:https://www.cnblogs.com/kenshinobiy/p/4671251.html

你可能感兴趣的文章
Web前端优化最佳实践及工具集锦
查看>>
两个想法
查看>>
Spark Streaming揭秘 Day20 动态Batch size实现初探(上)
查看>>
无限极分类,传递一个父ID,返回所有子集
查看>>
最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)
查看>>
示波器X1探头和X10探头
查看>>
HDU 5795 A Simple Nim
查看>>
Centos7下配置Java web环境(JDK、Tomcat、Mysql)
查看>>
javascript导图 ...
查看>>
Liferay——代码调试(Debug)方法
查看>>
BZOJ 2929 网络流
查看>>
业务安全的一些实例
查看>>
【转】Windows(server2008)下使用VisualSVN Server搭建SVN服务器
查看>>
题解 P1000 【超级玛丽游戏】
查看>>
移动端html5页面导航栏悬浮遮挡内容第一行解决办法
查看>>
Linux非阻塞IO(六)使用poll实现非阻塞的服务器端
查看>>
JS设置CSS样式的几种方式
查看>>
asp.net网站Application_Start疑是不执行的现象
查看>>
信号量同步编程
查看>>
Spring MVC 异常处理优解
查看>>