当前位置:首页 > PHP教程 > php文件操作 > 列表

php读取大文件最好的实现方法

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-10 14:23:08 浏览: 评论:0 

php读取大文件方法我们一般是一行行来讲取而不是一次性把文件全部写入内存中了,这样会导致php程序卡死,下面给大家整理一个例子.

读取大文件最后几行数据:

  1. /** 
  2.  * 取文件最后$n行 
  3.  * @param string $filename 文件路径 
  4.  * @param int $n 最后几行 
  5.  * @return mixed false表示有错误,成功则返回字符串 
  6.  */ 
  7. function FileLastLines($filename,$n){ 
  8.     if(!$fp=fopen($filename,’r')){ 
  9.         echo ”打开文件失败,请检查文件路径是否正确,路径和文件名不要包含中文”; 
  10.         return false; 
  11.     } 
  12.     $pos=-2; 
  13.     $eof=”"; 
  14.     $str=”"; 
  15.     while($n>0){ 
  16.         while($eof!=”n”){ 
  17.             if(!fseek($fp,$pos,SEEK_END)){ 
  18.                 $eof=fgetc($fp); 
  19.                 $pos–; 
  20.             }else
  21.                 break
  22.             } 
  23.         } 
  24.         $str.=fgets($fp); 
  25.         $eof=”"; 
  26.         $n–; 
  27.     } 
  28.     return $str
  29. echo nl2br(FileLastLines(‘sss.txt’,4)); 
  30. /**  * 取文件最后$n行  * @param string $filename 文件路径  * @param int $n 最后几行  * @return mixed false表示有错误,成功则返回字符串  */ function FileLastLines($filename,$n){     if(!$fp=fopen($filename,'r')){         echo "打开文件失败,请检查文件路径是否正确,路径和文件名不要包含中文";         return false;     }     $pos=-2;     $eof="";     $str="";     while($n>0){         while($eof!="n"){             if(!fseek($fp,$pos,SEEK_END)){                 $eof=fgetc($fp);                 $pos--;             }else{                 break;             }         }         $str.=fgets($fp);         $eof="";         $n--;     }     return $str; } echo nl2br(FileLastLines('sss.txt',4)); 
  31. //开源软件:phpfensi.com 
  32. function tail($fp,$n,$base=5) 
  33. assert($n>0); 
  34. $pos = $n+1; 
  35. $lines = array(); 
  36. while(count($lines)< =$n){ 
  37. try{ 
  38. fseek($fp,-$pos,SEEK_END); 
  39. } catch (Exception $e){ 
  40. fseek(0); 
  41. break
  42. $pos *= $base
  43. while(!feof($fp)){ 
  44. array_unshift($lines,fgets($fp)); 
  45. return array_slice($lines,0,$n); 
  46. var_dump(tail(fopen("access.log","r+"),10)); 
  47. $fp = fopen($file"r"); 
  48. $line = 10; 
  49. $pos = -2; 
  50. $t = " "
  51. $data = ""
  52. while ($line > 0) { 
  53. while ($t != "n") { 
  54. fseek($fp$pos, SEEK_END); 
  55. $t = fgetc($fp); 
  56. $pos --; 
  57. $t = " "
  58. $data .= fgets($fp); 
  59. $line --; 
  60. fclose ($fp); 
  61. echo $data

Tags: php读取大文件 php文件操作

分享到: