Лучший способ сделать это - использовать fread и fgets для чтения построчно, это очень быстро, поскольку за один раз читается только одна строка, а не файл while:
Пример использования будет:
$handle = fopen("/logs/log.txt", "r")
if ($handle)
{
fseek($handle,-18,SEEK_END); //Seek to the end minus 18 lines
while (!feof($handle))
{
echo fgets($handle, 4096); //Make sure your line is less that 4096, otherwise update
$line++;
}
fclose($handle);
}