如何从文本文件中获取每一行并将其放入网站表中?

时间:2019-02-13 10:27:57

标签: php html str-replace explode

我有一个文本文件,其中包含可变数量的行,每行包含3项内容,即IP,浏览器信息和日期。基本上,这是包含这些内容的访客日志。

我想一行,获取每个单独的部分,并替换html文档表中的行。到目前为止,我只能从文件中获取第一行。

当我尝试仅在while循环中打印遍历每行的内容以查看其是否实际多次遍历时。它只回声一次,走一圈,读一行,然后停下来。

文本文件包含例如:

  • 2019/02/12 02:32:56-Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,like Gecko)Chrome / 71.0.3578.98 Safari / 537.36-:: 1 < / li>
  • 2019/02/12 02:32:58-Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,like Gecko)Chrome / 71.0.3578.98 Safari / 537.36-:: 1 < / li>
  • 2019/02/12 02:33:02-Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,like Gecko)Chrome / 71.0.3578.98 Safari / 537.36-:: 1 < / li>

日期,浏览器信息和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 :(得分:1)

问题在于如何将数据添加到minNativeZoom

$html

这将用当前正在处理的行的日期替换$html = str_replace("---date---", $string_split[0], $html); 字符串中的---date---的每个实例。如果$html是单行模板,则意味着它将转换为第一行的数据行。那会很好的。

但是对于下一行,替换字符串$html等不再出现在---date---中-$html现在包括您的第1行数据。因此$html找不到任何要替换的东西,并且实际上也不会做任何事情,除了第一行,您将再也看不到任何东西。

最好的解决方案是将模板和生成的结果分开:

str_replace()

答案 1 :(得分:0)

我认为您也许应该能够像这样读取文本文件。使用file打开文本文件会将内容放入一个数组中,然后很容易遍历,而将listexplode结合使用可以轻松生成变量。我无法真正确定上面的代码实际上是什么东西,因为似乎没有输出,也无法理解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 />';
}

答案 2 :(得分:0)

我刚刚解决了!

问题是

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

echo $html;

这两行都必须在while循环中。