Php 如何覆盖平面文件中的特定行?

Php 如何覆盖平面文件中的特定行?,php,text,Php,Text,我的文本文件包含: a b c d e 我不知道如何修改我的代码,以便只覆盖第3行,即用输入框“data”中键入的任何内容替换c。我的代码如下所示,当前输入框“数据”的内容将完全替换我的文件: $data = $_POST['data']; $file = "data.txt"; $fp = fopen($file, "w") or die("Couldn't open $file for writing"); fwrite($fp, $data) or die("Couldn't wr

我的文本文件包含:

a
b
c
d
e
我不知道如何修改我的代码,以便只覆盖第3行,即用输入框“data”中键入的任何内容替换c。我的代码如下所示,当前输入框“数据”的内容将完全替换我的文件:

$data = $_POST['data'];
$file = "data.txt"; 

$fp = fopen($file, "w") or die("Couldn't open $file for writing");

fwrite($fp, $data) or die("Couldn't write values to file"); 
fclose($fp);
我让它以另一种方式工作,即当页面首次加载时,下面的代码仅将第3行读入文本框:

$file = "data.txt";
$lines = file( $file ); 
echo stripslashes($lines[2]);

有人能告诉我实现这一点所需的代码吗?

唯一的方法是读取整个文件,更改第3行,然后将其全部写出来。基本上是这样的:

$lines = file($file);
$lines[2] = $_POST['data'];
file_put_contents($file, implode("\n", $lines));

顺便说一句,您的读取代码不仅读取第3行-它根据文件读取所有行,然后您只使用第3行。

唯一的方法是读取整个文件,更改第3行,然后将其全部写回。基本上是这样的:

$lines = file($file);
$lines[2] = $_POST['data'];
file_put_contents($file, implode("\n", $lines));

顺便说一句,您的读取代码不仅读取第3行-它根据文件读取所有行,然后您只使用第3行。

唯一的方法应该读取,因为您不存储/记住文件中的位置,这是唯一的方法;使用fseek,您可以跳转到文件中的某个位置,并从该位置覆盖和/或追加,而无需读取整个文件。仅当替换行的长度与现有行的长度完全相同时,才可以使用seek,这对于文本数据来说是不可能的。当然,如果你有固定长度的记录,那么寻找是有意义的…但是你正在重新创建一个数据库。谢谢你,我有点困惑-你是建议在编写代码还是在阅读代码中使用它?我尝试了这两种方法,但它仍在将输入框的所有内容写入文本文件。这就是整个编写代码-首先读取所有行,然后更改数组的第三个元素,然后将其全部写回。读取代码没有更改。它似乎不起作用:/。。。如果我上传data.txt,其中包含a、b、c等唯一行,我加载页面,我只能在正确的文本框中看到c,如果我将其更改为CCCCCC并点击save,然后查看它包含的所有文本文件都是CCCCCC。我已经注释掉了我原来的fwrite代码。。。有什么想法吗?唯一的方法应该是阅读,因为你没有存储/记住文件中的位置,这是唯一的方法;使用fseek,您可以跳转到文件中的某个位置,并从该位置覆盖和/或追加,而无需读取整个文件。仅当替换行的长度与现有行的长度完全相同时,才可以使用seek,这对于文本数据来说是不可能的。当然,如果你有固定长度的记录,那么寻找是有意义的…但是你正在重新创建一个数据库。谢谢你,我有点困惑-你是建议在编写代码还是在阅读代码中使用它?我尝试了这两种方法,但它仍在将输入框的所有内容写入文本文件。这就是整个编写代码-首先读取所有行,然后更改数组的第三个元素,然后将其全部写回。读取代码没有更改。它似乎不起作用:/。。。如果我上传data.txt,其中包含a、b、c等唯一行,我加载页面,我只能在正确的文本框中看到c,如果我将其更改为CCCCCC并点击save,然后查看它包含的所有文本文件都是CCCCCC。我已经注释掉了我原来的fwrite代码。。。有什么想法吗?