1

我正在尝试从文本文件中删除/编辑文本的某些部分,例如如果我的文本文件中有 10 行,那么我想编辑第 5 行或删除第 3 行而不影响任何其他行。

目前我在做什么 1. 打开文本文件并读取 php 变量中的数据 2. 完成对该变量的编辑 3. 删除文本文件的内容。4.在上面写新内容

但是有没有办法在不删除整个内容或只编辑这些内容的情况下做这件事?

我当前的代码是这样的

$file = fopen("users.txt", "a+");
$data = fread($file, filesize("users.txt"));
fclose($file);
$newdata = str_replace($old, $new, $data);
file_put_contents("users.txt", "");
$file = fopen("users.txt", "a+");
fwrite($file, $newdata);
fclose($file);
4

4 回答 4

2

您可以将其缩短为:

$data = file_get_contents("users.txt");
$newdata = str_replace($old, $new, $data);
file_put_contents("users.txt", $newdata);
于 2013-04-02T12:27:10.367 回答
1
$str = '';
$lines = file("users.txt");
foreach($lines as $line_no=>$line_txt)
{
$line_no += 1; // Start with zero 
//check the line number and concatenate the string 
if($line_no == 5)
{
// Append the $str with your replaceable text
}
else{
$str .= $line_txt."\n";
}
}
// Then overwrite the $str content to same file
// i.e file_put_contents("users.txt", $str);

我已经根据我的理解添加了解决方案,希望它会有所帮助!!!

于 2013-04-02T13:44:56.053 回答
0

如果您的文本文件中只有 10 行,那么除非它们是非常长的行,否则您正在更改更改内容所需的物理 I/O 量(磁盘一次只能读取/写入一个物理扇区的数据- 512 字节扇区的时代已经一去不复返了)。

是的,您可以通过仅写入已更改的扇区来修改大文件 - 但这需要您用相同大小的数据替换数据以防止框架错误(在 PHP 中使用 fopen 和 c+ 模式,fgets/fseek/fwrite/ftell , f 关闭)。

真正正确的答案是停止在文本文件中存储多值数据并使用 DBMS(这也解决了并发问题)。

于 2013-04-02T12:29:53.863 回答
0

您可以在每一行上工作:

$lines = file("users.txt");
foreach($lines as &$line){
  //do your stufff 
  // $line is one line
  //
}
$content = implode("", $lines);
//now you can save $content like before
于 2013-04-02T12:25:41.697 回答