После некоторого тестирования с приведенным ниже кодом я пришел к такому выводу:
- Скрипт отлично работает с файлами AVI как в Firefox, так и в Chrome (если я, конечно, изменю тип контента на видео/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;
}
}
$filePath
? - person Pekka   schedule 07.03.2012