PHP读取大文件实践

## 使用PHP分析超大的日志文件 如何使用php读取超过10G的文件,这个是今年四月份去一家公司面试时,面试官出的一道题目。因为工作经验不足,所以答的不好,当时也说了使用文件指针逐行读取,只是不知道使用什么函数。后来的几个月工作中,心中一直存在着这个问题,好在工作中没有碰到这样的应用场景。为了避免遗忘,还是把解决方案写出来,以备实际应用。

 

 1 function transBigFile($filename){
 2     $redis = new Redis();
 3     $redis -> connect('127.0.0.1',6379,3);
 4     $key = 'tmp:log:20161013';
 5     
 6     if($handler = fopen($filename,'rb')){
 7         while(!feof($handler)){
 8             $curline = fgets($handler);
 9             list($ip,$city_code) = explode(',', $curline);
10             $ip = substr($ip,0,strpos($ip,'/')); //截取字符串部分字符
11             usleep(100000);
12             $redis -> zadd($key,$ip,$city_code);
13             //$data = array_combine(['ip','city_code'] , [$ip,$city_code] );  //todo练习array_combine。这里这样用效率低下。
14         }
15     }
16     fclose($hander);
17 }
18 
19 set_time_limit(0);  //设置该脚本永不超时
20 $filename = 'big.csv';
21 transBigFile($filename);

 

posted @ 2016-10-13 15:22  roverliang  阅读(568)  评论(0编辑  收藏  举报