После некоторого тестирования с кодом ниже я пришел к такому выводу:
- Скрипт отлично работает для файлов AVI как в Firefox, так и в Chrome (если я изменяю тип контента на video / aviконечно)
- Скрипт отлично работает для MKV файлов в Chrome.Firefox выдает сообщение об ошибке мне в лицо, хотя (см. Ниже)
- Я скачал 20 мб большой тестовый файл (test7.mkv) из http://matroska.org/downloads/test_w1.html, чтобы протестировать файл меньшего размера.Странно, что Firefox может загрузить этот файл, и он, кажется, работает.Однако, если я попробую его на большом файле размером 6 ГБ, я получу ошибку Firefox, которую вы видите ниже
- Редактировать: Скачал файл размером 700 МБ, который вообще не воспроизводился в SM-плеере (код выхода 1), но хорошо воспроизводился в VLCигрок.В настоящее время я ищу способ найти, как и где файл может быть поврежден.
Мой очевидный вопрос: что я делаю не так?Как правильно скачать файл MKV в Firefox или лучше в любом распространенном браузере по этому вопросу.Я не могу найти ничего полезного в Google, но, возможно, я просто смотрю в неправильных местах.
Ошибка Firefox при попытке загрузить файл MKV:
Ошибка поврежденного содержимого
Невозможно отобразить страницу, которую вы пытаетесь просмотреть, поскольку обнаружена ошибка в передаче данных.
Невозможно отобразить страницу, которую вы пытаетесь просмотреть, поскольку ошибка впередача данных была обнаружена. Пожалуйста, свяжитесь с владельцами сайта, чтобы сообщить им об этой проблеме.
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;
}
}