如果在发送具有“0”的文件时;读取文件“;我修改了文件,会下载失败吗


If while sending a file with "readfile" I modify the file, will the download fail?

如果我用readfile()向浏览器发送一个大(200mb)文件,并且在用户下载时我修改了该文件,下载会成功吗?如果没有-我如何修改不断下载的大文件?

否,如果直接编辑文件数据,则不会成功完成。将收到损坏的文件。

然而。。。

在Linux中,如果rmmv是一个文件,任何已经打开该文件的程序都会继续访问它。只有关闭该文件后,该文件才会完全释放。因此,您可以通过以下步骤安全地编辑您的大文件:

  1. 将文件复制到临时名称
  2. 编辑文件
  3. rm file_being_downloaded; mv new_file file_being_downloaded;

我还没有测试过这一点,但这应该会让所有下载200 MB文件的人都能完整地收到他们的副本,新的下载者会得到你的更新版本。

我无法对此进行测试,但下载很可能会损坏,readfile()将返回false并引发错误。另一个选项,iffreadfile()锁定文件是,在文件完成读取之前,您将无法写入文件——不过我不认为是这样。

如果我是你,我会复制文件,提供它,然后删除它。你可能还想把文件内容加载到内存中并提供它,但对于200MB的文件来说,这是不切实际的。。。

$file = '/path/to/file.200mb';
$temp = tempnam(sys_get_temp_dir(), time() . '_');
copy($file, $temp);    
readfile($temp);    
unlink($temp);

我认为这取决于如何处理下载。

如果文件保存到服务器上的单独内存位置,并且您修改了实际文件。鉴于用户试图在备用内存位置下载文件,这不应该影响它。

最好的办法是建立一个新文件,然后更新代码以加载新文件。这样,下载旧文件的用户将继续这样做,但您可以转换到新文件。