正确的 fread() 应用程序?

Correct fread() application?

假设我正在上传一个分块文件,我必须重新组合它。我知道每次迭代的总块和数据。

我创建的代码是这样的:

for ($i = 1; $i <= $num_chunks; $i++) {

  $file = fopen($target_file.$i, 'rb');
  $buff = fread($file, 2097152);
  fclose($file);

  $final = fopen($target_file, 'ab');
  $write = fwrite($final, $buff);
  fclose($final);

  unlink($target_file.$i);
}

显然,2097152 值没有任何意义,至少对我而言。我阅读了 php 文档,但无法理解太多。谁能解释我应该如何选择 fread 的第二个参数?它是如何工作的?

第二个参数是要读取的数据量,因为你在一个块中读取它,你必须确保它足以处理任何块。您设置的值是 2MB,这可能就足够了,但您可以更改代码,以便它以较小的块读取它并循环直到输入被完全读取。

我也将其更改为打开一次输出文件,然后边写边写内容...

$final = fopen($target_file, 'wb');   // Open for write and start from beginning of file
for ($i = 1; $i <= $num_chunks; $i++) {
  $file = fopen($target_file.$i, 'rb');
  while($buff = fread($file, 4096))  {
      fwrite($final, $buff);
  }
  fclose($file);

  unlink($target_file.$i);
}
fclose($final);