我正在使用php在txt文件中执行读/写操作。当前我正在使用fseek($ file,0),如果我在fopen()中使用“ a”模式,则最后添加文本,如果我在使用“ c”或“ rw +”模式,则它将替换字符串文本文件的开头。如果我将位置编号增加到10,那么它将保留前10个字符,然后通过替换文件中的现有文本来添加字符串。
我想要实现的是,不覆盖文件中的文本,只需在该位置追加即可。
还有什么方法,我不通过给出位置编号来附加文本,而只是在文件中搜索特定的关键字,然后在该位置附加文本。
abc.php
<?php
$val = "string";
echo $val;
$myfile = fopen("demo.txt", "c") or die("Unable to open file!");
fseek($myfile, 0);
fwrite($myfile, $val);
fclose($myfile);
?>
demo.txt
this is some text
this is some text
this is some text
答案 0 :(得分:1)
$all = file_get_contents("file");
$find = strpos($all, "needle");
$write = substr($all, 0, $find) . "insert" . substr($all, $find);
file_put_contents("file", $all);
文件系统的工作方式是您不能在中间插入字节。如果必须在中间插入一些内容,则需要覆盖后面的所有内容。
如果性能影响不符合您的需求,则可能需要使用数据库格式来保存数据。
或者,如果您不想学习使用数据库,一种“便捷”的方法是在文件中的各个单元之间添加填充字节,以便您可以覆盖这些填充字节而不必将字节向后移动。实际上,这就是大多数文件系统和数据库实现在需要插入中间时如何防止开销的方式。