在PHP中有效地将固定大小的文件连接在一起

时间:2014-02-27 22:06:46

标签: php file-upload concatenation

我正在开发一个Web应用程序,需要上传非常大的文件(几千兆字节)。我们正在使用resumable.js上传文件。该库将文件拆分为块(默认为1024K)并上传它们;然后他们在服务器端重新组装。目前,连接所有块的脚本部分如下所示:

$fp = fopen('temp/'.$fileName, 'w');
for ($i=1; $i<=$total_files; $i++) {
    fwrite($fp, file_get_contents($temp_dir.'/'.$fileName.'.part'.$i));
}
fclose($fp);

这适用于较小的文件(大约100 MB左右)。但是,当它尝试加入较大的文件(多GB,有数百个块)时,它会在PHP脚本超时中断。

是否有更好/更快/更有效的方法将块连接在一起(可能利用固定但可配置的块大小)?

我考虑过的事情:

  • 向后台运行的外部程序进行控制,并且需要很长时间才能加入文件。 这使用户界面变得复杂,用户界面必须知道等待文件准备好。
  • 增加PHP超时。 这比上面稍微好一些,因为我不必轮询以检查文件是否准备就绪。但是,大文件仍需要很长时间。
  • 利用这些事实,通常以正确的顺序上传块,并在上传时将它们连接在一起。 这似乎容易出错,需要额外的簿记。无法保证按顺序上传,可能会多次上传块,服务器需要能够确定是否已上传块。

0 个答案:

没有答案