PHP覆盖文件中的特定位置

时间:2014-01-12 17:44:07

标签: php

我正在尝试在已经包含某些内容的文件中的特定位置写入文本。写完之后我发现文件被截断为文本大小加上fseek位置和第一个值为0的字符。这是正常行为还是我错过了什么?我想提一下,我正试图避免将文件加载到内存中并将其写回。

$file = fopen("text.txt","w");
fseek($file,3);
fwrite($file,"Hello");
fclose($file);

2 个答案:

答案 0 :(得分:4)

您需要以c模式打开文件,否则会在fopen上截断:

$file = fopen("text.txt","c");

有关所有文件打开模式的文档以及它们的具体用途,请参阅http://php.net/manual/de/function.fopen.php。另请参阅http://www.php.net/manual/en/function.fseek.php手册

答案 1 :(得分:0)

是的,这是正常行为:

fopen($file, "w")

  

将文件指针放在文件的开头,将文件截断为零长度。

fseek()

  

一般情况下,允许搜索文件结尾;如果随后写入数据,则读取文件结尾和搜索位置之间的任何未写入区域将产生值为0 的字节。 [..]   如果以附加(a或+)模式打开文件,则无论文件位置如何,都会追加写入文件的任何数据,并且调用fseek()的结果将是未定义的。

您可能希望以非截断写入模式打开文件(例如“c”但不是“a”)。