You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现逐行清除文本文件中与指定值不匹配的行

实现PHP逐行过滤文本文件中不匹配指定值的行

首先得感谢Prashant Pokhriyal、Steve、Ulrich Eckhardt三位朋友的评论反馈!之前我发的问题里,原本分行写的内容被合并成一行了,我已经把问题重新编辑修正啦。

先给大家看看我用的测试文本文件test.txt的内容:

115.5.108.249 2015-03-01
118.110.6.87 2018-01-03
36.120.105.13 2018-04-06

目前我已经有了一段PHP代码的雏形:

<?php
$fname = "test.txt";
$date = date("Y-m-d");
foreach($lines as $line)
    if(!strstr($line, $date))
        $out .= $line;
$f = fopen($fname, ...

现在我需要完成的功能是:用PHP逐行清除文本文件中与指定值不匹配的行——说白了就是只保留包含指定值的行,把其他行删掉。下面给大家分享完整的实现方案:

基础实现方案(适合小文件)

如果你的文件不大,用file()函数一次性读取所有行是最方便的,代码逻辑清晰易懂:

<?php
$fname = "test.txt";
// 这里可以替换成你需要匹配的任意值,比如固定日期"2018-01-03"
$matchValue = date("Y-m-d");

// 读取文件所有行,FILE_IGNORE_NEW_LINES参数会去掉每行末尾的换行符,方便后续处理
$lines = file($fname, FILE_IGNORE_NEW_LINES);
$filteredContent = '';

foreach($lines as $line) {
    // 这里判断:如果行里包含指定值,就保留它
    // 要是你想反过来——清除匹配的行,就改成!str_contains($line, $matchValue)
    if(str_contains($line, $matchValue)) {
        $filteredContent .= $line . PHP_EOL; // 添加换行符,保持文件原有格式
    }
}

// 以"w"模式打开文件,这个模式会清空原有内容,然后写入筛选后的内容
$fileHandle = fopen($fname, "w");
fwrite($fileHandle, $filteredContent);
fclose($fileHandle);

echo "文件处理完成!";
?>

小提示

  • PHP 8.0及以上版本推荐用str_contains(),语义更明确;如果是低版本PHP,继续用strstr()完全没问题
  • 要确保服务器对test.txt文件有读写权限,不然会报错哦

进阶实现方案(适合大文件)

如果你的文件特别大,一次性读取所有行可能会占用过多内存,这时候就需要逐行读取处理,用临时文件过渡:

<?php
$fname = "test.txt";
$matchValue = date("Y-m-d");
// 创建一个临时文件,用来存放筛选后的内容
$tempFile = tempnam(sys_get_temp_dir(), 'file_filter');

// 打开原文件(只读模式)和临时文件(写入模式)
$originalFile = fopen($fname, "r");
$tempHandle = fopen($tempFile, "w");

// 逐行读取原文件
while(($line = fgets($originalFile)) !== false) {
    // 判断当前行是否包含指定值,是就写入临时文件
    if(str_contains($line, $matchValue)) {
        fwrite($tempHandle, $line);
    }
}

// 关闭所有文件指针
fclose($originalFile);
fclose($tempHandle);

// 用临时文件替换原文件
rename($tempFile, $fname);

echo "大文件处理完成!";
?>

这种方法不会一次性加载整个文件到内存,处理超大文件时更稳定。

内容的提问来源于stack exchange,提问作者dani yal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:20:37