TXT文件搜索和删除

时间:2015-01-20 14:29:56

标签: php

一个(简单)问题。 我在PHP中有一个TXT文件搜索脚本。

$search = $_GET["search"];
$logfile = $_GET['logfile'];
// Read from file 
$file = fopen($logfile, "r");
?> <head> <title>Searching: <?php echo $search ?></title> </head> <?php
while( ($line =  fgets($file) )!= false)
{
if(stristr($line,$search))   // case insensitive
echo "<font face='Arial'> $line </font><hr>";
}
fclose($file);

现在我要做的是删除它在TXT文件中找到的所有文本。 我尝试过做一个str_replace但它不起作用。

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

我认为这会产生魔力:

$file->ftruncate($file->ftell());

答案 1 :(得分:0)

您需要收集不包含搜索词的行,并且需要将文本保存在数组中。

完成列表后,您需要以写入模式打开文件(这将清空文件),然后将您收集的文本写入文件。

以下是代码:

<?php
$search = isset($_GET["search"]) ? $_GET["search"] : '';
$logfile = isset($_GET['logfile']) ? $_GET['logfile'] : '';
$text_without_term_arr = array();
if(!empty($logfile) && !empty($search)){
    // Read from file
    $file = fopen($logfile, "r");
    echo '  <head>
                <title>Searching: ' . $search . '</title>
            </head>';
    while(($line = fgets($file))!== false){
        if(stristr($line, $search)){
            // Case insensitive search
            echo '<font face="Arial">' . $line . '</font><hr/>';
        } else {
            // Search term not found in these lines
            array_push($text_without_term_arr, $line);
        }
    }
    fclose($file);
    // Empty the file and write the text again without the search term
    if(!empty($text_without_term_arr)){
        $new_file = fopen($logfile, "w");
        $content = implode("\n", $text_without_term_arr);
        fwrite($new_file, $content);
        fclose($new_file);
    }
}
?>

答案 2 :(得分:0)

您需要另一个文件句柄将结果写入:

$tempname=tmpname('/tmp','result');
$outfile=fopen($tempname,'w');

接下来,使用str_ireplace删除每行中找到的文字:

$newline=str_ireplace($search, '', $line);

然后将新行写入out文件:

fputs($outfile,$newline); // May need to send PHP_EOL too

关闭文件:

fclose($outfile);

然后将新文件重命名为旧文件名:

rename($tempname,$logfile);