我想保留一个确切的行数,它需要一个文件反转它并回显它,但文件可能会变长,并希望将其限制为多行。
$file = file("update.log");
$file = array_reverse($file);
foreach($file as $f){
if (stripos($f, "Sale") !== false) {
$class = "sales";
} else{
$class = "row";
}
echo "<div class='".$class." scale'>".$f."</div>";
}
答案 0 :(得分:1)
使用计数器,当它遇到max_lines数字时,会跳出foreach循环。
$file = file("update.log");
$file = array_reverse($file);
$count = 0;
$max_lines = 100;
foreach($file as $f){
if ($count >= $max_lines){
break;
}
if (stripos($f, "Sale") !== false) {
$class = "sales";
} else{
$class = "row";
}
$count++;
echo "<div class='".$class." scale'>".$f."</div>";
}
答案 1 :(得分:0)
$file = file("update.log");
$file = array_reverse($file);
$lineLimit = 25;
$lineCounter = 0;
foreach($file as $f){
if (stripos($f, "Sale") !== false) {
$class = "sales";
} else{
$class = "row";
}
echo "<div class='".$class." scale'>".$f."</div>";
$lineCounter++;
if($lineCounter > $lineLimit)
break; //Will exit the loop
}
答案 2 :(得分:0)
我认为这可以更快,更灵活地避免内存问题。您不必阅读文件的每一行,因此您可以使用以下内容:
function viewLastLines($logfile,$maxlines=25) {
$handle = fopen($logfile, "r");
fseek($handle, -($maxlines),SEEK_END);
while (($line = fgets($handle)) !== false)
$outputlines[]=$line;
fclose($handle);
return $outputlines;
}
在你的情况下像这样使用它:
$file = array_reverse(viewLastLines("update.log",100));
foreach($file as $f){
if (stripos($f, "Sale") !== false) $class = "sales";
else $class = "row";
echo "<div class='".$class." scale'>".$f."</div>";
}