Php 当用户下载一个大文件时,我更改它会发生什么?
在以下情况下会发生什么情况: 在后端,管理员上载了许多(大)文件,并对它们进行了压缩,从而生成Php 当用户下载一个大文件时,我更改它会发生什么?,php,download,Php,Download,在以下情况下会发生什么情况: 在后端,管理员上载了许多(大)文件,并对它们进行了压缩,从而生成example.zip 在某一点上,访问者来到站点并开始下载这个大文件。管理员添加了更多的文件并按下“转换为zip”。它开始压缩,结果写入相同的位置,相同的名称example.zip 用户下载了50%,新的zip是否会影响这一点?我知道PHP脚本会加载到内存中,但是如果您有大文件,这些文件就不适合 // OPENING THE FILE IN READ-ONLY $fp = fopen($filepa
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);
虽然我仍然不知道我的问题的答案,但我知道一个被删除的文件在使用时实际上不会被删除,直到它不再使用为止 这意味着,当用户下载一个大文件时,管理员会删除该文件,下载用户会继续下载该文件,但所有其他用户会显示为已删除 在本例中,我创建了一个
downloadZip.php
,单击它可以获得zip的最新版本。当管理员重新压缩所有内容时,将产生name2.zip
,然后是name3.zip
等
UserA单击下载,获取
name1.zip
。管理员删除,用户A不受影响,用户B现在在单击downloadZip.php
时将获得name2.zip
?也许我可以改进这个问题…你测试过这个吗?这种情况极不可能得到实施。Fopen会打开文件描述符,fread会一直读到最后,如果有人下载一个不断变化的文件,会简单地下载一个无法打开的zip文件,或者一个永不结束的请求,因为文件被一块一块地读,直到找到结尾。我将实现这一点,所以我想事先知道应该注意什么:)这将在资源有限的主机上进行,所以我不能简单地重命名它并生成另一个文件。同样的原则是,如果我在有人下载时删除它(并将另一个命名文件放在今天的日期作为回报),现在会发生什么?向用户提供一个500MB的zip,但它不会打开,这是一项糟糕的服务,我的目标不是:)这取决于文件系统及其配置。通常,写入打开读取的文件会损坏读取的数据,具体取决于已读取的内容和写入数据的位置。在关闭读取句柄之前,删除打开读取的文件不会删除该文件。