让我们考虑一下大小在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
...
由于
答案 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然后替换你想要的内容。