php多线程thread开发与应用的例子
php多线程的使用,首先需要PHP5.3以上版本,并安装pthreads PHP扩展,可以使PHP真正的支持多线程,扩展如何安装请自行百度.
PHP扩展下载:https://github.com/krakjoe/pthreads
PHP手册文档:http://php.net/manual/zh/book.pthreads.php
在安装好扩展之后,就可以运用多线程了,下面贴个通过搜索结果抓取百度网盘内容的代码:
<?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":"( ? < links > . *) "}/", $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(?<url>.+?)&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("/文件名:(?<name>.*) 文件大小:(?<size>.*) 分享者:(?<user>.*) 分享时间:(?<date>.*) 下载次数:(?<number>[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); //线程执行方法 } } } ?>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

php不支持多线程的,原因是:PHP默认并不支持多线程,要使用多线程需要安装pthread扩展,而要安装pthread扩展,必须使用--enable-maintainer-zts参数重新编译PHP。

如何使用PHP多线程实现高性能的RPC服务器随着互联网的不断发展,分布式系统的需求越来越多。而远程过程调用(RemoteProcedureCall,RPC)是这些分布式系统中经常使用的通信机制之一。它可以让不同机器上的程序像调用本地函数一样调用远程函数,从而实现系统之间的数据传输和功能调用。在实际开发中,为了提高系统的性能和并发处理能力,使用多线程技术来

如何通过PHP多线程提高数据库读写性能随着互联网的快速发展,数据库读写性能已成为了一个关键的问题。当我们的应用程序需要频繁地读取和写入数据库时,使用单线程的方式往往会导致性能瓶颈。而采用多线程的方式可以提高数据库读写的效率,从而提高整体的性能。PHP作为一种常用的服务器端脚本语言,有着灵活的语法和强大的数据库操作能力。本文将介绍如何通过PHP多线程技术来提高

如何通过PHP多线程提高大规模数据排序的速度随着互联网的高速发展和大数据的普及,对于处理海量数据的需求也越来越大。其中,对于数据排序这一常见问题,如何提高处理速度成为了一个亟待解决的问题。在PHP领域,多线程技术被认为是一种有效的解决方案。本文将介绍如何通过PHP多线程提高大规模数据排序的速度。一、多线程的原理多线程是指同时存在多个线程,多个线程可同时执行不

如何通过PHP多线程提高数据库查询性能引言:随着互联网的迅猛发展,数据库查询性能成为了开发者面临的重要挑战之一。而PHP作为一种广泛使用的服务器端脚本语言,对于数据库查询也扮演着重要的角色。本文将探讨如何通过PHP多线程技术提高数据库查询性能,以满足高并发请求的需求。一、什么是多线程在讨论如何利用多线程提高数据库查询性能前,我们首先需要了解什么是多线程。通俗

如何通过PHP多线程加速大文件下载在现今互联网时代,文件的传输变得越来越常见和重要。然而,对于较大的文件,下载时间会明显增加,给用户带来不便。为了提高大文件的下载速度,我们可以通过PHP多线程来实现加速。本文将介绍如何通过PHP多线程加速大文件下载的方法。首先,为了能够实现PHP多线程下载,我们需要做一些准备工作。确保服务器上已安装了最新版本的PHP,并启用

PHP多线程编程实践:使用协程实现并发任务处理随着互联网应用的发展,对于服务器的性能和并发处理能力的要求也越来越高。传统的多线程编程在PHP中并不是很容易实现,因此为了提高PHP的并发处理能力,可以尝试使用协程来实现多线程编程。协程(Coroutine)是一种轻量级的并发处理模型,它可以在单线程中实现多个任务的并发执行。与传统的多线程相比,协程的切换成本更低

在PHP编程中,如果我们需要执行多个任务或同时处理多个请求,多线程是一种非常重要的编程技术。多线程可以实现多个线程同时运行,提高程序效率,提升用户体验。一、PHP多线程介绍PHP多线程是指同时执行两个或多个线程的程序,每个线程都是一个独立的子进程,都可以独立的执行任务。在PHP中,多线程可以通过pcntl扩展进行处理。pcntl扩展是PHP支持的进程控制扩展
