【问题标题】:How to write in a file at specific position or before/after specific string in php?如何在php中特定位置或特定字符串之前/之后写入文件?
【发布时间】:2019-07-13 07:10:49
【问题描述】:

我正在使用 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

【问题讨论】:

  • 您能否举例说明您想要实现的目标(文件如何开始以及最终的外观)以及您已经尝试过的代码。
  • @NigelRen 看到,我更新了我的问题。

标签: php file-handling


【解决方案1】:
$all = file_get_contents("file");
$find = strpos($all, "needle");
$write = substr($all, 0, $find) . "insert" . substr($all, $find);
file_put_contents("file", $all);

文件系统的工作方式是不能在中间插入字节。如果要在中间插入一些东西,则需要覆盖后面的所有内容。

如果性能影响不符合您的需求,您可能希望使用数据库格式来保存数据。

或者,如果您不想学习使用数据库,“方便”的方法是在文件中的单元之间添加填充字节,这样您就可以覆盖这些填充字节而无需将字节移到后面。这实际上是大多数文件系统和数据库实现在需要插入中间时防止开销的方式。

【讨论】:

  • 感谢您的回复,您的回答给了我实现解决方案的提示,方法是获取字符串位置,然后在该位置附加即将到来的字符串。
猜你喜欢
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多