在使用下面的代码进行一些测试后,我得出了这个结论:
- 该脚本适用于 firefox 和 chrome 中的 AVI 文件(当然,如果我将内容类型更改为 video/avi)
- 该脚本适用于 Chrome 中的 MKV 文件。Firefox 在我面前抛出了一条错误消息(见下文)
- 我从http://matroska.org/downloads/test_w1.html下载了一个 20 mb 的大测试文件 (test7.mkv)来测试一个较小的文件。奇怪的是 Firefox 可以下载该文件并且它似乎可以工作。但是,如果我在 6 GB 的大文件上尝试它,我会收到您在下面看到的 firefox 错误
- 编辑:下载了一个 700 mb 的文件,在 SM 播放器(退出代码 1)中根本没有播放,但在 VLC 播放器中播放良好。我目前正在寻找一种方法来查找文件可能损坏的方式和位置。
我明显的问题是:我做错了什么?如何在 Firefox 中正确下载 mkv 文件,或者在任何常见浏览器中更好地下载。我在谷歌上找不到任何有用的东西,但也许我只是在寻找错误的地方。
尝试下载 mkv 文件时出现 Firefox 错误:
损坏的内容错误
由于检测到数据传输错误,无法显示您尝试查看的页面。
您尝试查看的页面无法显示,因为检测到数据传输错误。请联系网站所有者告知此问题。
function download($file)
{
$path = $_SERVER['DOCUMENT_ROOT']; //<-- added the relative part after that
$fullPath = $path.$file;
set_time_limit(0);
if ($fd = fopen ($fullPath, "r"))
{
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: video/x-matroska");
header("Content-Disposition: attachment; filename=\"$file\"");
header("Content-Transfer-Encoding: binary");
header("Content-length: $fsize");
$file = @fopen($fullPath,"rb");
if ($file)
{
while(!feof($file))
{
print(fread($file, 1024*8));
flush();
if (connection_status()!=0)
{
@fclose($file);
die();
}
}
@fclose($file);
}
exit;
}
}