【问题标题】:Correct fread() application?正确的 fread() 应用程序?
【发布时间】:2019-03-21 06:11:03
【问题描述】:

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

我创建了这样的代码:

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 的第二个参数?它是如何工作的?

【问题讨论】:

  • 函数应该读取多少字节。通常,我们在这个参数中设置文件大小。
  • 好的。但是如何将这个概念应用于分块上传呢?那么应该是块本身的大小吗?或者换句话说,总文件大小/块数?

标签: php file file-upload fread chunks


【解决方案1】:

第二个参数是要读取的数据量,当您在一个块中读取它时,您必须确保它足以处理任何块。您设置的值是 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    相关资源
    最近更新 更多