php thread 例子,php多线程thread开发与应用的例子
PHP扩展下载:https://github.com/krakjoe/pthreads
PHP手册文档:http://php.net/manual/zh/book.pthreads.php
在安装好扩展之后,就可以运用多线程了,下面贴个通过搜索结果抓取百度网盘内容的代码:
代码如下
include 'include/CurlLoad.class.php'; // 引入读取库
/**
* 多线程抓取内容
* @param array $url 待抓取URL列表集合
* @return 成功返回指定内容,失败返回NULL
*/
function vget($url) {
$ret = BaiduSRLinksGet ( $url, 1 ); // 获取结果列表地址
if ($ret != null) {
if (array_key_exists ( "links", $ret )) {
$infos = array ();
$number = count ( $ret ['links'] );
for($i = 0; $i < $number; $i ++) {//循环创建线程对象
$thread_array [$i] = new baidu_thread_run ( $ret ['links'] [$i] );
$thread_array [$i]->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 );//线程执行方法
}
}
}
?>
php thread 例子,php多线程thread开发与应用的例子相关推荐
- java多线程thread使用_Java多线程——thread及runnable的基本使用及交替执行
/*** Created by LiuHuiChao on 2016/3/11.*/public classActor extendsThread { @Overridepublic voidrun( ...
- 继承Thread类实现多线程简单实例
继承Thread类实现多线程简单实例 文章目录 继承Thread类实现多线程简单实例 一.多线程的意义 二.多线程的创建 三.代码 一.多线程的意义 1.为什么要使用多线程 (a)提高用户体验或者避免 ...
- 【java的socket编程】结合多线程Thread实现通信(使用线程池和非线程池对比)、java开发UDP/IP网络程序
结合多线程实现socket 使用非线程池(拓展Thread) 使用线程池(Executor pool) 使用DatagramPacket DatagramSocket开发UDP/IP程序 使用UDP获 ...
- Android开发笔记(四十八)Thread类实现多线程
Thread概述 Thread类是真正的线程,查看源码可见Thread也实现了Runnable接口,但它内部有创建新的工作线程,所以Thread对象运行在与主线程不一样的分线程上. 因为Thread对 ...
- java中thread实例_Java多线程2:Thread中的实例方法
Thread类中的方法调用方式: 学习Thread类中的方法是学习多线程的第一步.在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别: 1 ...
- Java 多线程Thread
重点: java中多线程运行原理 掌握两种线程创建方式 两种创建线程方式好处和弊端 掌握使用Thread类 中获取和设置线程名称的方法 使用匿名内部类创建多线程 描述java中线程池的运行原理 线程安 ...
- python的多线程threading_Python中多线程thread与threading的实现方法,pythonthreading
Python中多线程thread与threading的实现方法,pythonthreading 学过Python的人应该都知道,Python是支持多线程的,并且是native的线程.本文主要是通过th ...
- [C++] - C++11 多线程 - Thread
转载整理自:https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/tree/master/zh/chapter3-Thread 1 ...
- 多线程 -Thread -Runnable -Callable
多线程(Thread) 线程简介 线程实现 线程状态 线程同步 线程通信问题 高级主题 核心概念 线程就是独立的执行路径; 在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc程; ...
最新文章
- JVM运行时数据区---堆(堆内存)
- asp连接mysql odbc,在ASP中连接MySQL数据库的方法,最好的通过ODBC方法
- 关于C#(ASP.net)存取MySQL LongText字段的心得[转]
- Spring的Java配置方式
- Windows环境下32位汇编程序设计C版code--第五章(三)
- C++ leetCode 1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个
- 上海市二级c语言软件环境,上海市计算机二级C语言复习资料 word整理版.doc
- 有些事情现在不做一辈子就都不会做了
- Eclipse中部分快捷键
- Restful Service 中 DateTime 在 url 中传递
- java生成图片验证码
- plot sin 03-数据区域边界线的位置
- 信息系统项目管理师核心考点(十九)制定项目章程依据(输入)
- 38掌握分布式存储系统 GlusterFS 的基本用法,包括卷管理、数据复制
- Linux使用zip打包文件
- CSS3-选择器+文字+边框+背景+颜色+渐变
- 一文读懂:股权激励的“三重境界”
- 猿创征文 | Java知识【Java基础语法】
- VTK学习笔记(三十六)VTK图像填充
- 腾达n4怎么设置虚拟服务器,腾达(Tenda)N4无线路由器怎么设置
热门文章
- Tricks(三十四)—— 判断某一属性列是数值型还是标称型
- vb还是python强大-VB已死,Python当立 | 忆云竹
- python中国官网-Python教程
- 零基础学python-如何零基础开始自学Python编程
- python用什么来写模块-使用C语言编写Python模块-引子【转】
- 小学生python编程教程-围观~山东省的小学生Python编程入门都学的什么?
- python从入门到精通pdf下载-Python网络爬虫从入门到精通 PDF 下载
- 启达传媒-微信小程序|微信小程序工具|微信小程序开发|微信小程序制作
- html列表隐藏显示出来,JavaScript栏目列表隐藏/显示简单实现
- java 获取js元素,表单元素值获取方式js及java方式的简单实例