Как получить каждую строку из текстового файла и поместить ее в таблицу веб-сайта? - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть текстовый файл, в котором содержится переменное количество строк, и каждая строка содержит 3 вещи, IP-адрес, информацию браузера и дату.По сути, это журнал посещений, который содержит эти вещи.

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

Когда я пытался просто напечатать что-то в цикле while, который проходит через каждую строку, чтобы увидеть, действительно ли он проходит через это несколько раз,не делает.Он повторяется только один раз, проходит один круг и читает одну строку, а затем останавливается.

Текстовый файл содержит, например:

  • 2019/02/12 02:32:56- Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 71.0.3578.98 Safari / 537.36 - :: 1
  • 2019/02/12 02:32: 58 - Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 71.0.3578.98 Safari / 537.36 - :: 1
  • 2019/02/12 02: 33: 02 - Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537,36 (KHTML, как Gecko) Chrome / 71,0,3578,98 Safari / 537,36 - :: 1

Дата, информация браузера и IP.

<?php
// file path
$path = './visitors.txt';
$html = file_get_contents("log.html");

$visitor_log = fopen($path, 'r');
if(flock($visitor_log, LOCK_SH)){
  // Loop genom alla rader i visitors.txt
  while (($line = fgets($visitor_log)) !== false) {
    $html_pieces = explode("<!--==xxx==-->", $html, 3); 
    $string_split = explode("--", $line, 3); 
    $html = str_replace("---date---", $string_split[0], $html); 
    $html = str_replace("---browser---", $string_split[1], $html); 
    $html = str_replace("---ip---", $string_split[2], $html); 
  }
  fclose($visitor_log);
}else{
die("Error! Couldn't read from file.");
}
echo $html;
?>

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

РЕДАКТИРОВАТЬ: Я только что попытался

echo $html;

в цикле while ион печатает первую строку три раза, поэтому я считаю, что она проходит все три строки, но не получает новые данные.Это как-то связано с:

$html = file_get_contents("log.html");

не обновляется?

РЕДАКТИРОВАТЬ: HTML-код для таблицы

<table cellspacing="0" cellpadding="10" border="1" width="100%">
  <thead>
    <tr>
      <th align="left">Dare</th>
      <th align="left">Browser</th>
      <th align="left">IP</th>
    </tr>
  </thead>
  <tbody>
    <!--==xxx==-->
    <tr>
      <td align="left">---date---</td>
      <td align="left">---browser---</td>
      <td align="left">---ip---</td>
    </tr>
    <!--==xxx==-->
  </tbody>
</table>

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Я только что решил!

Проблема была

$html = file_get_contents("log.html");

и

echo $html;

Обе строки должны быть в цикле while.

0 голосов
/ 13 февраля 2019

Проблема заключается в том, как вы добавляете данные в $html:

$html = str_replace("---date---", $string_split[0], $html); 

Это заменит каждый экземпляр ---date--- в вашей строке $html на дату строки, которая в данный момент находится в очереди.обработанный.Если $html является шаблоном с одной строкой, это означает, что он преобразуется в строку данных для первой строки.Это будет работать нормально.

Но для следующей строки строки подстановки ---date--- и т. Д. Больше не появляются в $html - $html теперь включает данные вашей строки 1.Таким образом, str_replace() не найдет ничего для замены и фактически ничего не сделает, и вы никогда не увидите ничего, кроме первой строки.

Лучшее решение - сохранить ваш шаблон исгенерированные результаты отдельно:

$html = file_get_contents("log.html");

// Split up your html into header, data row, and the bottom
$html_pieces = explode("<!--==xxx==-->", $html, 3); 

// Show the table header
echo $html_pieces[0];

$path = './visitors.txt';
$visitor_log = fopen($path, 'r');

while (($line = fgets($visitor_log)) !== false) {
    $string_split = explode("--", $line, 3); 

    // Generate a new line of $output from the data row of your $html_pieces
    $output = str_replace("---date---", $string_split[0], $html_pieces[1]); 
    $output = str_replace("---browser---", $string_split[1], $output); 
    $output = str_replace("---ip---", $string_split[2], $output); 

    // And display, line-by-line
    echo $output;
}

// All done, finish off your table
echo $html_pieces[2];
0 голосов
/ 13 февраля 2019

Я думаю, вы должны быть в состоянии прочитать текстовый файл, как это возможно.Использование file для открытия текстового файла помещает содержимое в массив, который затем легко перебирать, а использование list в сочетании с explode упрощает генерацию переменных.Я не мог точно определить, какой код был на самом деле выше, так как кажется, что нет выходных данных и не мог понять, где вписывается log.html, но, надеюсь, это могло бы помочь.(не проверено)

$textfile = './visitors.txt';
$lines = file( $textfile, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES );

foreach( $lines as $line ){
    list( $date, $useragent, $ip )=explode( '--', $line );
    echo $date,$useragent,$ip,'<br />';
}
...