php 通过curl并发请求计数 php并发curl 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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); 失踪了几天,又来了?这段代码与你原来的效果是一样的,本以为至迟次日就有回应,没想到过了那么多天去掉 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, 'r+');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 = "http://www.XXX.com/peter_linux.php"; for($i=0;$i<30;$i++) { $oplink[$i]['link'] = $url; } $mh = curl_multi_init(); foreach($oplink as $key=>$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调用Com组件问题 ftp服务器哪一种比较好? 求教各位大大关于smtp发送邮件的问题 提问: 关于HTML中嵌入PHP<?=expression?>不起作用 怎么分别读取文本框的文本并插入相应sql mssql_bind 字符串参数长度问题 很多php网站的详细页点进去都是html,请问怎么做到的? 是不是只有在windows下,才能用php访问access数据库? 救救小女子!关于HTTP认证问题!!! php 与 sql server2000 PHP读取Oracle中文直接不显示 为什么我的网站很卡,系统问题还是硬件问题?
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; $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);
$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);
echo microtime(1) . " $n";
$url = "http://www.XXX.com/peter_linux.php"; for($i=0;$i<30;$i++) {
$oplink[$i]['link'] = $url;
} $mh = curl_multi_init(); foreach($oplink as $key=>$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 ;
}
本人模拟的并发访问代码 如下