我有一个文本文件,其中包含可变数量的行,每行包含3项内容,即IP,浏览器信息和日期。基本上,这是包含这些内容的访客日志。
我想一行,获取每个单独的部分,并替换html文档表中的行。到目前为止,我只能从文件中获取第一行。
当我尝试仅在while循环中打印遍历每行的内容以查看其是否实际多次遍历时。它只回声一次,走一圈,读一行,然后停下来。
文本文件包含例如:
日期,浏览器信息和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>
答案 0 :(得分:1)
问题在于如何将数据添加到minNativeZoom
:
$html
这将用当前正在处理的行的日期替换$html = str_replace("---date---", $string_split[0], $html);
字符串中的---date---
的每个实例。如果$html
是单行模板,则意味着它将转换为第一行的数据行。那会很好的。
但是对于下一行,替换字符串$html
等不再出现在---date---
中-$html
现在包括您的第1行数据。因此$html
找不到任何要替换的东西,并且实际上也不会做任何事情,除了第一行,您将再也看不到任何东西。
最好的解决方案是将模板和生成的结果分开:
str_replace()
答案 1 :(得分:0)
我认为您也许应该能够像这样读取文本文件。使用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 />';
}
答案 2 :(得分:0)
我刚刚解决了!
问题是
$html = file_get_contents("log.html");
和
echo $html;
这两行都必须在while循环中。