PHP替换/更新大文本文件中的一行

时间:2018-06-14 12:57:30

标签: php

让我们考虑一下大小在1Gb附近的格式文本文件:

...
li1
li2
li3
...

我的任务是将第li2行更新为line2

以下操作不起作用:

$fd = fopen("file", 'c+');

// ..
// code that loops till we reach li2 line..
// ..
$offset = ftell($fd);
// ..

fseek($fd, $offset );
fwrite($fd, "line2" . PHP_EOL);

因为它产生:

...
li1
line2
3
...

我期待得到结果:

...
li1
line2
li3
...

由于

2 个答案:

答案 0 :(得分:1)

在我看来,我们需要一个临时文件,我们在这里复制未更改的结果,添加更改并继续使用未更改的结果。最后,可以重命名原始文件,并将临时文件命名为。

由于我熟悉文件系统,您不能只删除/插入部分文件。或者它太复杂而且不值得。

第二 - 您可以将文件复制到内存中并在那里进行修改,但是这里依赖于资源,您的代码可能无法通过某些服务器(例如专用托管)。

祝你好运!

答案 1 :(得分:0)

如果您知道必须在文本中更改内容,请使用以下命令:

$file_data=file_get_contents(some_name.txt);
$text = str_replace("line2", "li2", $file_data);
file_put_contents('some_name_changed.txt',  $text);

或者逐行阅读并加载$ text然后替换你想要的内容。