失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > php 通过curl并发请求计数

php 通过curl并发请求计数

时间:2023-03-07 08:34:41

相关推荐

php 通过curl并发请求计数

后端开发|php教程

计数,php,curl,并发,请求

后端开发-php教程

function cumulative_number() {

$file = “number.txt”;

$current = file_get_contents($file);

$current = (empty($current)) ? 1 : (int)$current + 1;

if(!file_put_contents($file, $current, LOCK_EX)) {

cumulative_number();

}

return $current;

}

手机怎么上传源码,如何扩大vscode,ubuntu桌面美化记录,tomcat转发规则,c 连接sqlite步骤,jquery panel插件,交易所前端框架,最新影视爬虫,php的 dir,dz论坛seo设置,文学网站程序,网页介绍模板下载,dz资源下载类模板,网站导航页面源码,学生成绩管理系统 .net,易语言启动外部程序lzw

我想通过上这个函数实现计数,但是有一个问题,同时有多个访问,那么这个计数就会出问题。问题在同时访问的时候,存在多个访问同时读取了文件里的内容,虽然在写的时候有锁保护,但是因为写入的文本存在相同的内容,那么计数就会出问题了。

新闻资讯门户源码,Ubuntu18原生,神奇动物档案爬虫,php实现百度搜索框提示,seo+lzw

我不知道如何解决在读取文件的时候,应用类似锁一样的功能。求帮助

易语言接码平台源码,vscode查看c库函数,ubuntu系统救援,tomcat配置外网服务,爬虫技术选品,微信 php 调试,靠谱seo优化加盟平台,轻量级企业网站源码,wap手机端模板lzw

回复讨论(解决方案)

/archives/220

兄弟 你提供的资料 对外这个问题没有相关作用啊

/archives/220

$fn = count.txt;if(! file_exists($fn)) file_put_contents($fn, 1);$fp = fopen($fn, +);if(flock($fp, LOCK_EX | LOCK_NB)) { $n = fgets($fp); rewind($fp); fputs($fp, $n+1);}flock($fp, LOCK_UN);

很抱歉,版主的方法 貌似也会出问题。同时访问的数量少 是没有问题的 ;访问数量多的话,就会出问题了。

$fn = count.txt;if(! file_exists($fn)) file_put_contents($fn, 1);$fp = fopen($fn, +);if(flock($fp, LOCK_EX | LOCK_NB)) { $n = fgets($fp); rewind($fp); fputs($fp, $n+1);}flock($fp, LOCK_UN);

失踪了几天,又来了?

这段代码与你原来的效果是一样的,本以为至迟次日就有回应,没想到过了那么多天

去掉 LOCK_NB 就可以了

测试代码

$mh = curl_multi_init();for($i=0; $i<1000; $i++) { $conn[$i]=curl_init("http://localhost/file_count.php?i=$i"); curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1); curl_multi_add_handle ($mh,$conn[$i]);}do { $n=curl_multi_exec($mh,$active); } while ($active);foreach ($conn as $ch) { $res[] = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL) . .curl_multi_getcontent($ch); curl_close($ch);}print_r($res);

file_count.php

<?php$fn = count.txt;if(! file_exists($fn)) file_put_contents($fn, 1); $fp = fopen($fn, +);if(flock($fp, LOCK_EX /*| LOCK_NB*/)) { $n = fgets($fp); rewind($fp); fputs($fp, $n+1);}flock($fp, LOCK_UN);echo microtime(1) . " $n";

function chatbackcurl(){ $url = "/peter_linux.php"; for($i=0;$i$info) { $conn[$key]=curl_init($info[link]); curl_setopt($conn[$key],CURLOPT_RETURNTRANSFER,1); curl_multi_add_handle ($mh,$conn[$key]); } $active = null; 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); } } foreach ($oplink as $key => $info) { $oplink[$key][ack_status]=curl_multi_getcontent($conn[$key]); curl_close($conn[$key]); } return $oplink ;}

本人模拟的并发访问代码 如下

多谢版主帮忙了 问题基本上解决了,但是不知道访问量很大的时候 会不会出问题了。

如果觉得《php 通过curl并发请求计数》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。