以下のコードでいくつかのテストを行った後、次の結論に達しました。
- このスクリプトは、Firefox と Chrome の両方で AVI ファイルに対して正常に動作します (もちろん、コンテンツ タイプをビデオ/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 エラー:
破損したコンテンツ エラー
データ転送にエラーが発生したため、表示しようとしているページを表示できません。
データ送信でエラーが検出されたため、表示しようとしているページを表示できません。この問題について Web サイトの所有者に連絡してください。
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;
}
}