永发信息网

PHP-php 怎么实现类似多线程

答案:1  悬赏:50  手机版
解决时间 2021-04-27 19:41
PHP-php 怎么实现类似多线程
最佳答案
php本身不支持多线程,但可以通过curl_multi_*系列函数来模拟多线程,以下是我用过的一个函数,但请求不能过多,否则会出现一些难以解释的问题。希望对你有帮助。

function rolling_curl($urls, $delay) {
$queue = curl_multi_init();
$map = array();

foreach ($urls as $url) {
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_NOSIGNAL, true);

curl_multi_add_handle($queue, $ch);
$map[(string) $ch] = $url;
}

$responses = array();
do {
while (($code = curl_multi_exec($queue, $active)) == CURLM_CALL_MULTI_PERFORM) ;

if ($code != CURLM_OK) { break; }

// a request was just completed -- find out which one
while ($done = curl_multi_info_read($queue)) {

// get the info and content returned on the request
$info = curl_getinfo($done['handle']);
$error = curl_error($done['handle']);
$results = callback(curl_multi_getcontent($done['handle']), $delay);
$responses[$map[(string) $done['handle']]] = compact('info', 'error', 'results');

// remove the curl handle that just completed
curl_multi_remove_handle($queue, $done['handle']);
curl_close($done['handle']);
}

// Block for data in / output; error handling is done by curl_multi_exec
if ($active > 0) {
curl_multi_select($queue, 0.5);
}

} while ($active);

curl_multi_close($queue);
return $responses;
}

function callback($data, $delay) {
preg_match_all('/(.+)<\/h3>/iU', $data, $matches);
usleep($delay);
return compact('data', 'matches');
}

$urls = array();
for($i=0;$i<5;$i++)
{
array_push($urls,"http://localhost/baiduPush/demo/hello2.php");
}
rolling_curl($urls, 0.5);
?>
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
于服务器连接失败
低碳生活的方法有哪些
黑龙江省校学生用品公司地址在什么地方,想过
好友买卖奴隶卖不出去咋办
惠普笔记本电脑什么样的算配置好的…
朗读和演讲有什么区别?
脾胃虚弱怎么办?最近总胀气好难受
力的作用线通过支点怎么画
怎么样才能做春梦
脸上的痘痘都好几年了,我用过好多祛痘产品,
為什麼QQ炫舞下好了不能安裝
谁有能用的中文PS下载地址啊?
高中学过的诗词,关于初高中学过的杜甫的诗
心动羊骨烩面大骨头我想知道这个在什么地方
各位DJ大侠,听听这段DJ是什么歌?
推荐资讯
迪信通永和店地址在哪,我要去那里办事
为什么晚上有一点声音就睡不着!
qq飞车游戏中怎么参加活动?
湖南卫视娱乐节目都是现场直播吗?
三维一体美容养生会所怎么去啊,有知道地址的
游戏人生如何开通,谁能邀请我开通啊?
中国2010年百分之多少人用QQ
有480人排成一个方阵、每8人排成一行、每行之
QQ幻想世界战斗力为什么会减少的
北京哪里有卖高丽鞋的呀
对男友说的500字励志生日祝福语
怎样消除word水印
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?