Без ООП, зато не нужно лопатить весь файл целиком.
// 4096 отступ от конца файла. Число с потолка, если знаете примерную длину строк, можете указать более подходящее число
$lines = get_lines('/pant/to/somefile.txt', 10, 4096);
print_r($lines);
function get_lines($fileName, $linesLimit, $tailOffset = 1024, $handle = null, $size = null) {
if (!$size) $size = filesize($fileName);
if (!$handle) $handle = fopen($fileName, 'r');
fseek($handle, $size - $tailOffset); // установим смещение _почти_ в конец файла, отступив от конца на $tailOffset
$lines = [];
while (($line = fgets($handle)) !== false) {
$lines[] = $line;
}
$linesCount = count($lines);
if ($linesCount > $linesLimit) { // нашлось более десяти строк
$result = array_slice($lines, $linesCount - $linesLimit); // берем десять последних, бинго!
} else {
// если получили меньше строк, увеличим отступ
$tailOffset *= ceil($linesLimit / $linesCount);
$result = get_lines($fileName, $linesLimit, $tailOffset, $handle, $size);
}
return $result;
}