2012-03-06 5 views
1

を持つ大規模なMKVファイルをダウンロードします。スクリプトは、Firefoxとクロムの両方でのAVIファイルのために正常に動作します私はこの結論に来ている下のコードを使用していくつかのテストの後、PHPスクリプト

  • (私はコンテンツタイプを変更した場合to video/avi to course)
  • このスクリプトは、ChromeのMKVファイルで正常に動作します。 Firefoxは私の顔にエラーメッセージを投げます(下記参照)
  • 私は小さなファイルでテストするために、http://matroska.org/downloads/test_w1.htmlから20メガビットの大きなテストファイル(test7.mkv)をダウンロードしました。不思議なことに、Firefoxはそのファイルをダウンロードでき、うまくいくようです。しかし、6GBの大きなファイルで試してみると、以下のようなFirefoxエラーが表示されます
  • 編集:SMプレイヤー(exitcode 1)では再生できませんでしたが、VLCプレーヤーで正常に再生された700 MBのファイルをダウンロードしました。私は現在、ファイルがどのようにどこで破損しているのかを見つける方法を探しています。

私の明らかな質問は何ですか:私は間違っていますか?どのようにmkvファイルをfirefoxで適切にダウンロードするか、それとも一般的なブラウザであれより良い方法です。私はグーグルで役立つ何かを見つけることはできませんが、多分私は間違った場所を探しています。データ伝送におけるエラーが検出されたため、表示しようとしているページは表示されません

破損したコンテンツのエラーを

: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; 
    } 
} 
+2

破損したファイルのソースコードを調べます。 PHPエラーメッセージが表示されます。 –

+0

このファイルのようなヘッダーを設定しないと、$ filePathでファイルをダウンロードするようにユーザーに求められますか?ブラウザがファイルが破損していることを伝えています。私はどんなPHPメッセージも手に入れません。 – wacki

+0

ダウンロードしたファイル。それを見てください。 –

答えて

0

はソリューション:

私が定義する変数が期待値に設定されている場合、私はチェックしたはずです。 Fileize()が32ビットの符号付き整数を返します。 https://stackoverflow.com/a/5502328/1232791

他の可能な解決策は、コンテンツ長ヘッダーを定義しないために、次のようになります。今のところ

は、私はここに示されています機能を取りました。このソリューションでは、クライアントはどれくらいの時間がかかりますか?

0

Firefoxがfilenameヘッダ値の絶対パスに窒息してもよい

サーバ上のMKVファイルの絶対パス。

ではなく、単なるファイル名を指定してみてください。

$filename = pathinfo($filePath, PATHINFO_BASENAME); 
header("Content-Disposition: attachment; filename=\"$filename\""); 
関連する問題