第一次发帖,如果有什么不对的地方很抱歉。
我正在尝试创建一个安全的文件下载店面。实际上它有效,但仅适用于小文件。我有一个 1.9gb 的产品要下载,它在传输过程中一直停止。大小也不一致,我最多有 1gb,但通常是 200-500mb。
目的是创建一个只有注册帐户的用户才能下载文件的空间,因此无法直接链接。
我在本网站的其他地方读到,在文件读取循环中重置脚本超时应该绕过脚本时间限制。
try
{
$num_bytes = filesize ("products/" . $filename);
$mp3content = fopen("products/" . $filename, "rb") or die("Couldn't get handle");
$bytes_read=0;
if ($mp3content) {
while (!feof($mp3content)) {
set_time_limit(30);
$buffer = fread($mp3content, 4096);
echo $buffer;
$bytes_read+=4096;
}
fclose($handle);
}
}
catch (Exception $e)
{
error_log("User failed to download file: " . $row['FILENAME'] . "(" . $row['MIMETYPE'] . ")\n" . $e, 1, getErrorEmail());
}
error_log("Bytes downloaded:" . $bytes_read . " of " . $num_bytes, 1, getErrorEmail());
我没有收到关于失败的大文件的最终错误日志电子邮件,但我确实收到了关于成功的小文件的电子邮件,所以我知道代码原则上是有效的。