PHP 读取大文件

简介:

最近在工作中遇到了需要读取系统日志的问题,日志文件很大,大概在1G以上甚至更大,随即研究了读取得方法,直接使用PHP自带的函数就可以解决这几个问 题,但是绝对不能使用file和file_get_contents,这两个函数是一次性将文件全部加载进来,如果文件在几十M 还是可以的,但是稍大的文件时不能用的,内存是会溢出的 ,贴个自己的方法,欢迎大家指教!

Java代码   收藏代码
  1. <?  
  2. /** 
  3. * PHP 读取大文件 测试文件大于1G的文本文件 
  4. * 
  5. * @copyright(c) 2010 by 高成. All rights reserved 
  6. * @author 高成 
  7. * 
  8. */  
  9. /** 
  10. * 文件读取 
  11. * 
  12. * @param String $filename 文件地址 
  13. * @param Int $count 读取得行数 
  14. * @param String $sep 每行的分隔标记 
  15. * @return String 返回结果 
  16. */  
  17. function readBigFile($filename, $count = 20, $tag = '\r\n') {  
  18.     $content = '';//最终内容  
  19.     $_current = '';//当前读取内容寄存  
  20.     $step= 1;//每次走多少字符  
  21.     $tagLen = strlen($tag);  
  22.     $start = 0;//起始位置  
  23.     $i = 0;//计数器  
  24.     $handle = fopen($filename,'r+');//读写模式打开文件,指针指向文件头  
  25.     while($i < $count && !feof($handle)) {    //文件没有到结尾和小鱼需要读取得行数时  
  26.         fseek($handle, $start, SEEK_SET);//指针设置在文件开头  
  27.         $_current = fread($handle,$step);//读取文件  
  28.         $content .= $_current;//组合字符串  
  29.         $start += $step;//依据步长向前移动  
  30.         //依据分隔符的长度截取字符串最后免得几个字符  
  31.         $substrTag = substr($content, -$tagLen);  
  32.         if ($substrTag == $tag) {    //判断是否为判断是否是换行或其他分隔符  
  33.             $i++;  
  34.         }  
  35.     }  
  36.     //关闭文件  
  37.     fclose($handle);  
  38.     //返回结果  
  39.     return $content;  
  40. }  
  41. $filename = 'E:/2010log.log';//需要读取的文件  
  42. $tag = '\r\n';//行分隔符 注意这里必须用双引号  
  43. $count = 20;//读取行数  
  44. $data = readBigFile($filename,$count,$tag);  
  45. echo $data;  
  46. ?>  
相关文章
|
1月前
thinkphp5.1隐藏index.php入口文件
thinkphp5.1隐藏index.php入口文件
30 0
thinkphp5.1隐藏index.php入口文件
|
3月前
|
PHP 数据安全/隐私保护
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:用代码的方式创建目录+文件+写入数据(都由你定)
php案例:用代码的方式创建目录+文件+写入数据(都由你定)
php案例:用代码的方式创建目录+文件+写入数据(都由你定)