大きなファイルからデータの最後の数行を読み取ります:
/**
* ファイルの最後の $n 行を取得します
* @param string $filename ファイルパス
* @param int $n 最後の数行
* @return 混合 false はエラーがあることを意味し、成功した場合は文字列が返されます
*/
関数 FileLastLines($filename,$n){
If(!$fp=fopen($filename,'r')){
echo "ファイルを開けませんでした。ファイルのパスが正しいかどうか確認してください。パスとファイル名に中国語の文字が含まれていません。";
false を返す;
}
$pos=-2;
$eof=””;
$str=””;
While($n>0){
while($eof!=”n”){
If(!fseek($fp,$pos,SEEK_END)){
$eof=fgetc($fp);
$pos–;
}他{
休憩;
}
}
$str.=fgets($fp);
$eof=””;
$n–;
}
$str; を返します
}
echo nl2br(FileLastLines(‘sss.txt’,4));
/*** ファイルの最後の $n 行を取得します * @param string $filename ファイル パス * @param int $n 最後の数行 * @return mixed false はエラーがあることを意味し、成功した場合は文字列を返します*/ function FileLastLines($filename,$n){ if(!$fp=fopen($filename,'r')){ echo "ファイルを開けませんでした。ファイル パスが次のとおりであるかどうかを確認してください。パスとファイル名には漢字「;」を含めないでください。!fseek($fp,$pos,SEEK_END)){ $str.=fgets($fp); } } $str; echo nl2br(FileLastLines('sss.txt',4));
関数テール($fp,$n,$base=5)
{
アサート($n>0);
$pos = $n+1;
$lines = array();
while(count($lines)
試してください{
fseek($fp,-$pos,SEEK_END);
} catch (例外 $e){
fseek(0);
休憩;
}
$pos *= $base;
while(!feof($fp)){
array_unshift($lines,fgets($fp));
}
}
return array_slice($lines,0,$n);
}
var_dump(tail(fopen("access.log","r+"),10));
$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);
$data をエコーする
|