php 通过curl并发请求计数
程序员文章站
2022-03-16 13:53:21
...
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;
}
我想通过上这个函数实现计数,但是有一个问题,同时有多个访问,那么这个计数就会出问题。问题在同时访问的时候,存在多个访问同时读取了文件里的内容,虽然在写的时候有锁保护,但是因为写入的文本存在相同的内容,那么计数就会出问题了。
我不知道如何解决在读取文件的时候,应用类似锁一样的功能。求帮助
$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;
}
我想通过上这个函数实现计数,但是有一个问题,同时有多个访问,那么这个计数就会出问题。问题在同时访问的时候,存在多个访问同时读取了文件里的内容,虽然在写的时候有锁保护,但是因为写入的文本存在相同的内容,那么计数就会出问题了。
我不知道如何解决在读取文件的时候,应用类似锁一样的功能。求帮助
回复讨论(解决方案)
http://www.phpthinking.com/archives/220
兄弟 你提供的资料 对外这个问题没有相关作用啊
http://www.phpthinking.com/archives/220
$fn = 'count.txt';if(! file_exists($fn)) file_put_contents($fn, 1);$fp = fopen($fn, 'r+');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, 'r+');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; $ifile_count.php
function chatbackcurl(){ $url = "http://www.XXX.com/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]['back_status']=curl_multi_getcontent($conn[$key]); curl_close($conn[$key]); } return $oplink ;}
本人模拟的并发访问代码 如下多谢版主帮忙了 问题基本上解决了,但是不知道访问量很大的时候 会不会出问题了。
推荐阅读
-
php中利用curl进行post请求示例
-
PHP CURL 同步/异步 并发 采摘 爬行
-
php下通过curl抓取yahoo boss 搜索结果的实现代码_PHP教程
-
php curl模拟post请求小实例
-
html - 对一个文件进行发送了下载请求,php能记录下这次请求么,可以通过什么来记录这个请求?
-
IE6通过get发送奇数个汉字请求会乱码的解决方法_PHP教程
-
php curl 获取https请求的2种方法,curlhttps
-
php中通过curl模拟登陆discuz论坛的实现代码_PHP教程
-
php之curl实现http与https请求的方法,phpcurlhttps请求_PHP教程
-
php使用curl通过代理获取数据的实现方法