我正在尝试在已经有一些内容的文件中的特定位置编写文本。写入后,我发现文件被截断为文本大小加上 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")。