2017-04-21 36 views
2

在以下情况下会发生什么情况:当用户下载文件时更改大文件会发生什么?

在后端中,管理员上传了很多(大)文件,并将其压缩,结果为example.zip

在某个时候,访问者来到网站并开始下载这个大文件。管理员添加了一些更多的文件,并按下“转换为zip”。它开始压缩并将结果写入同一位置,同名example.zip

用户下载量达到50%,新的zip文件是否会干扰此操作?我知道,PHP脚本被加载到内存中,但如果你有大文件,那些不适合。

// OPENING THE FILE IN READ-ONLY 
$fp = fopen($filepath, "r"); 
$bufferlength = 1024; 
while (!feof($fp)){ 
    // READ A BUFFER SIZE OF THE FILE 
    $buffer = fread($fp, $bufferlength); 
    echo $buffer; 
    $buffer = ""; 
    flush(); // THIS IS ESSENTIAL FOR LARGE DOWNLOADS 
} 
fclose($fp); 
+0

为什么downvote?也许我可以改善这个问题... – Martijn

+0

你测试过了吗?这种情况极不可能实现。 Fopen将打开文件描述符,fread将读取直到结束,如果下载更改文件的用户将简单地下载比无法打开的zip文件或无法结束的请求,因为文件被读取并按块大块地滚动,直到结束被发现。 – Gntem

+0

我要实现这个,所以我想事先知道要注意什么:)这将在资源有限的主机上,所以我不能简单地重命名它并创建另一个文件。同样的原则,如果我在下载时删除它(并且将另一个命名文件作为回报放入今天的日期),现在会发生什么? – Martijn

回答

0

虽然我还是不知道该回答我的问题,我不知道一个文件,该文件是删除实际上并没有得到当它在使用中删除,直到它不再使用。

这意味着,当用户正在下载大文件并且管理员删除它时,它将继续为下载用户进行,但对于其他用户将显示为删除。

在这种情况下,我创建了一个downloadZip.php,单击它时,会得到最新版本的zip。当管理员重新压缩所有内容时,将产生一个name2.zip,然后产生一个name3.zip等。

UserA单击下载,获取name1.zip。管理员删除,用户A不受影响,当用户B点击downloadZip.php时,他将获得name2.zip

相关问题