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);
本人博客所有文章,均为原创。部分文章中或引用相关资料,但均已著明来源出处。可随意转载、分享,但需加本文链接,以及版权说明。