荆轲刺秦王
需要参数: 1:文件路径 2:行数 读多少行 如果输入的行数大于文件实际行数 则读出全部文件
function tailFile( $file, $lines )
{
$handle = fopen($file, "r");
$linecounter = $lines;
$pos = -2;
$beginning = false;
$text = [];
while ($linecounter > 0) {
$t = " ";
while ($t != "\n") {
if (fseek($handle, $pos, SEEK_END) == -1) {
$beginning = true;
break;
}
$t = fgetc($handle);
$pos--;
}
$linecounter--;
if ($beginning) {
rewind($handle);
}
$text[$lines - $linecounter - 1] = fgets($handle);
if ($beginning) {
break;
}
}
fclose($handle);
//return array_reverse($text); // 5,6,7,8,9
return $text; //9,8,7,6,5
}
在最后的返回结果中有两种格式:
假如都是要返回100行,而文件有超过100行
直接 return 是倒序输出,例如: 9,8,7,6,5
而使用 array_reverse 函数之后,则是: 5,6,7,8,9
再来一个获取所有行的函数:
function getLines( $file )
{
$handle = fopen($file, "r");
$line = 0 ;
while( fgets($handle,100*1024) ) {
$line++;
}
fclose($handle);
return $line;
}
前面有了倒序读文件,再来一个正序读文件,一行一行读:
function readTxt( $path, $rows )
{
$arr = [];
$file = fopen($path,"r");
for( $i=0; $i<$rows; $i++ ){
$arr[$i] = trim(fgets($file,100*1024));//fgets()函数从文件指针的第一行读取
$i++;
}
fclose($file);
return $arr;
}
同理,如果不需要行号 读取全部内容的话,只需将 for 虚幻 换为 while 循环 条件是: !feof( $file )