我需要将来自多个来源的数据上传到一个文件中,这些数据块是按任何顺序排列的,而且我很难将它们写入文件中。
下面是一个例子:
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不触及文件的其余部分,这样我就可以随意地填写该文件了吗?
发布于 2019-01-11 11:16:12
fopen模式w将文件截断为零长度。
使用r+,正如用户对fseek的评论所建议的那样,http://php.net/manual/en/function.fseek.php#81450
如果您使用file ()将数据写入文件,请记住以"r+“模式打开该文件,例如: $fp=fopen($filename,"r+"); 不要以模式"a“打开文件(用于追加),因为它将文件指针放在文件的末尾,并且不允许您在文件中寻找前面的位置(它不是针对我的!)另外,不要以"w“模式打开文件--尽管这会使您处于文件的开头--因为它会清除文件中的所有数据。
https://stackoverflow.com/questions/54144920
复制相似问题