我想通过将结果写入第二个文本文件来过滤一个文本文件。
我有一些代码,它不起作用,它只是将第一个文本文件的LAST行写入单独的备份文本文件。
代码:
//filter the ingame bans
$search = "permanently";
$logfile = "ban_list.txt";
$timestamp = time();
// Read from file
$file = fopen($logfile, "r");
while( ($line = fgets($file) )!= false)
{
if(stristr($line,$search))
{
$cache_ig = "ingamebanlist.txt";
$fh = fopen($cache_ig, 'w') or die("can't open file");
$content = "\n";
fwrite($fh, $content);
$content = $line;
fwrite($fh, $content);
fclose($fh);
}
}
我个人认为我的代码中没有任何错误,请帮忙。
记住:它确实有用,但它只将ban_list.txt
文件的最后一行写入ingamebanlist.txt
文件......
答案 0 :(得分:1)
你的代码会发生的事情是你打开(使用写模式),在你的循环中写入和关闭所以它只会写入1个条目然后覆盖它直到最后一个条目,因此只保存最后一个项目。
你想要的是将它放在循环之外:
<?php
$search = "permanently";
$logfile = "ban_list.txt";
$cache_ig = "ingamebanlist.txt";
$timestamp = time();
$read = fopen($logfile, "r") or die("can't read file");
$write = fopen($cache_ig, 'w') or die("can't write to file");
while(($line = fgets($read)) !== false)
{
if(stristr($line,$search))
{
fwrite($write, $line . "\n");
}
}
fclose($write);
fclose($read);
另一种解决方案是a
使用w
代替fopen
w
,因为a
将:
仅供写作;将文件指针放在文件的开头,并将文件截断为零长度。如果该文件不存在,请尝试创建它。
虽然$fh = fopen($cache_ig, 'w') or die("can't open file");
会:
仅供写作;将文件指针放在文件的末尾。如果该文件不存在,请尝试创建它。
这将允许您的代码按原样工作而不做任何更改,但行:
$fh = fopen($cache_ig, 'a') or die("can't open file");
要:
{{1}}