PHP 覆盖文件中特定位置的位置



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

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

c模式打开文件,否则它会在fopen上被截断:

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

有关所有文件打开模式的文档及其确切作用,请参阅 http://php.net/manual/de/function.fopen.php。另请参阅 http://www.php.net/manual/en/function.fseek.php 手册

是的,

这是正常行为:

fopen($file, "w")

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

fseek()

通常,允许搜索超过文件末尾;如果随后写入数据,则在文件末尾和查找位置之间的任何未写入区域中读取将产生值为 0 的字节。[..] 如果以追加(a 或 a+)模式打开文件,则无论文件位置如何,您写入文件的任何数据都将始终被追加,并且调用 fseek() 的结果将未定义。

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

最新更新