最近在工作中遇到了需要读取系统日志的问题,日志文件很大,大概在1G以上甚至更大,随即研究了读取得方法,直接使用PHP自带的函数就可以解决这几个问 题,但是绝对不能使用file和file_get_contents,这两个函数是一次性将文件全部加载进来,如果文件在几十M 还是可以的,但是稍大的文件时不能用的,内存是会溢出的 ,贴个自己的方法,欢迎大家指教!
- <?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- function readBigFile($filename, $count = 20, $tag = '\r\n') {
- $content = '';
- $_current = '';
- $step= 1;
- $tagLen = strlen($tag);
- $start = 0;
- $i = 0;
- $handle = fopen($filename,'r+');
- while($i < $count && !feof($handle)) {
- fseek($handle, $start, SEEK_SET);
- $_current = fread($handle,$step);
- $content .= $_current;
- $start += $step;
-
- $substrTag = substr($content, -$tagLen);
- if ($substrTag == $tag) {
- $i++;
- }
- }
-
- fclose($handle);
-
- return $content;
- }
- $filename = 'E:/2010log.log';
- $tag = '\r\n';
- $count = 20;
- $data = readBigFile($filename,$count,$tag);
- echo $data;
- ?>