你的需求这样是解决不了的要分开处理。。比如,可将ip按第一位,写到255个文件里面,,,也可以将ip转换成数字,这样处理后续可以少用点内存分别在255个文件里面,找出前1000名因为每组至多包含2^24个不同的数【暂时不考虑ipv6】,这个内存可接受的
这样用一个数组遍历,复杂度O(n),即可找出前1000最后维护一个1000的有序数组,往里面插入数据即可,超过1000,弹出最小的那个
=====
能给出例子代码吗?
这样用一个数组遍历,复杂度O(n),即可找出前1000最后维护一个1000的有序数组,往里面插入数据即可,超过1000,弹出最小的那个
=====
能给出例子代码吗?
解决方案 »
- 求教php mysql 中怎么保存当前时间日期?
- 如何用smarty中的get_config_vars()
- 请问谁做过QQ的站内应用的,我在做微博站内应用,求指点
- 我把文件夹的名字改成了“第一章”之后,以前文件夹名字叫“2”
- php利用mail函数发送邮件时,1:内容是一般的网页,有文本也有图片,如何发送过去。2:还有。xm语言的网页又如何发送呢。
- php远程登录linux系统,急
- 页面上有语法错误不报错,而是直接页面无法加载【有图】
- 学习网页制作需要的语言
- 正在努力学PHP,刚接触类这个东西,太多不明白,请大家帮忙这个为何无输出?
- 我的Apache没有配置好?局域网内怎么访问不到我的机器?
- 求助正责
- 数组得值的奇怪问题
$line = fgets($fp);
$line = explode(' ',$line);
print_r($line);function read_100w($fp){
$i=0;
$ip_100w = array();
while(!feof($fp)){
$i++;
if($i > 1000000) break;
$line = fgets($fp);
$line = explode(' ',$line);
$ip_info = $line[6];
if(preg_match('/(\d\.\d\.\d\.\d):(\d)\[(\d\.\d\.\d\.\d):(\d)\]\->(\d\.\d\.\d\.\d):(\d)\[(\d\.\d\.\d\.\d):(\d)\]/i',$line[6],$ip_info)){
$alt_ip = $ip_info[5];
$alt_port = $ip_info[6];
@$ip_100w[$alt_ip]++;
}
}
arsort($ip_100w);}
?>
$filename = '/var/log/haproxy.log.3';
echo $filename . ': ' . filesize($filename) . ' bytes';?>
/var/log/haproxy.log.2: 12491488115 bytesPHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1073741825 bytes) in /var/log/jincheng.php on line 7