Я бы предложил создать файл журнала только с строками таблицы, а затем включить его в файл с нужным верхним и нижним колонтитулами.
Таким образом, вы пишете в 'log.html', но просматриваете 'log.php', который будет выглядеть так:
<html>
<head>
</head>
<body>
<table>
<?php include('log.html') ?>
</table>
</body>
</html>
Конечно, возможно, лучшим способом было бы сохранить данные журнала без HTML (в виде простого файла или базы данных), а затем создать представление по требованию. Но для того, что вы ищете, вышесказанное должно работать.
Если все это должно быть в статическом файле, вы можете использовать
bool ftruncate ( resource $handle , int $size )
чтобы удалить последнюю строку файла. Просто убедитесь, что вы знаете, как долго находится «нижний колонтитул». Вот пример кода, который может работать для вас.
$footer = "</table></html>";
$file = fopen($log_file, 'rw');
ftruncate($file, strlen($footer));
fseek($file, 0, SEEK_END);
fputs($file, $log);
fputs($file, $footer);
fclose($file);
Вот документация ftruncate документация.