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. }
  30. echo nl2br(FileLastLines(‘sss.txt’,4));

[code lang=”php”]

/**  * 取文件最后$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));

[/code]
[code lang=”php”]
function tail($fp,$n,$base=5)
{
assert($n>0);
$pos = $n+1;
$lines = array();
while(count($lines)< =$n){
try{
fseek($fp,-$pos,SEEK_END);
} catch (Exception $e){
fseek(0);
break;
}
$pos *= $base;
while(!feof($fp)){
array_unshift($lines,fgets($fp));
}
}
return array_slice($lines,0,$n);
}
var_dump(tail(fopen("access.log","r+"),10));
[/code]
[code lang=”php”]
$fp = fopen($file, "r");
$line = 10;
$pos = -2;
$t = " ";
$data = "";
while ($line > 0) {
while ($t != "n") {
fseek($fp, $pos, SEEK_END);
$t = fgetc($fp);
$pos –;
}
$t = " ";
$data .= fgets($fp);
$line –;
}
fclose ($fp);
echo $data
[/code]