如何将部分块写入现有文件?

时间:2019-01-11 10:45:07

标签: php

我需要将来自多个源的数据上传到一个文件中,这些块以任何顺序出现,而我很难将它们实际写入文件中。

这是一个例子:

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不触摸文件的其余部分,以便我可以按随机顺序填写文件?

1 个答案:

答案 0 :(得分:0)

打开模式w将文件截断为零长度。

使用r+,正如该用户对fseek的建议一样,http://php.net/manual/en/function.fseek.php#81450

  

如果您使用fseek()将数据写入文件,请记住在“ r +”中打开文件   模式,例如:

$fp=fopen($filename,"r+");
     

不要以“ a”模式打开文件(用于追加),因为它会把   文件末尾的文件指针,不会让您   fseek文件中的较早位置(这对我来说不是!)。也,   不要以“ w”模式打开文件-尽管这会使您处于   文件的开头-因为它清除了所有数据   文件。