Присоединение к файлу журнала HTML в PHP - PullRequest
1 голос
/ 11 сентября 2009

Я пытаюсь добавить файл журнала, используя формат таблиц HTML для каждого инцидента. Однако есть одна трудность, которую я не знаю, как решить. Вот статический вывод HTML

<table>
  <tr><td> .... </td>
  </tr>

 <!-- new log entry should enter here -->

  </table>
</html>

Вопрос в том, как я могу быстро вставить записи журнала в таблицу, не путая HTML, предпочтительно используя наименьшее количество обработки? Я знаю, что могу загрузить весь файл, использовать шаблонное решение и переписать файл, но это может быть медленным (файлы журналов могут быстро расти!).

Так что я ищу обычный открытый файл для добавления и как-то пишу после последней строки, но перед тегом.

Есть предложения?

PS. Я знаю, что большинство браузеров будет отображать HMTL, если я пропущу тег в конце, но мне любопытно посмотреть, может ли быть идеальное решение.

Ответы [ 2 ]

2 голосов
/ 11 сентября 2009

Я бы предложил создать файл журнала только с строками таблицы, а затем включить его в файл с нужным верхним и нижним колонтитулами.

Таким образом, вы пишете в '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 документация.

1 голос
/ 11 сентября 2009

Я не совсем уверен, что вы просите, но это что-то вроде этого?

<table>
    <tr><td> .... </td></tr>
    <?php
        foreach ($logitems as $item)
        {
            echo "<tr><td>" . $value . "</td></tr>\n";
        }
    ?>
</table>
...