我需要将来自多个源的数据上传到一个文件中,这些块以任何顺序出现,而我很难将它们实际写入文件中。
这是一个例子:
function create_file($path, $size_b) {
$f = fopen($path, "w");
fseek($f, $size_b - 1, SEEK_CUR);
fwrite($f, "0");
fclose($f);
}
function write_file_chunk($path, $offset, $chunk) {
$f = fopen($path, "w");
fseek($f, $offset, SEEK_CUR);
fwrite($f, $chunk);
fclose($f);
}
$name = "boo.txt";
create_file($name, 128);
write_file_chunk($name, 10, "hello");
write_file_chunk($name, 0, "hello");
问题是fwrite只是将字符串写入指令的位置,然后不管该文件后面是否有数据,都将文件在那里结束。
是否有一种方法可以使fwrite不触摸文件的其余部分,以便我可以按随机顺序填写文件?
答案 0 :(得分:0)
打开模式w
将文件截断为零长度。
使用r+
,正如该用户对fseek的建议一样,http://php.net/manual/en/function.fseek.php#81450:
如果您使用fseek()将数据写入文件,请记住在“ r +”中打开文件 模式,例如:
$fp=fopen($filename,"r+");
不要以“ a”模式打开文件(用于追加),因为它会把 文件末尾的文件指针,不会让您 fseek文件中的较早位置(这对我来说不是!)。也, 不要以“ w”模式打开文件-尽管这会使您处于 文件的开头-因为它清除了所有数据 文件。