6

私はすべてのヘッダーを試しました。コンテンツの長さがある場合とない場合。

問題は、ダウンロードが途中でクラップスになることです。しかし、ほとんどの場合のみ。

時々それはうまくいく。

サーバーリソースの使用は簡単です。すべての設定ファイルは問題ありません。進行中はphpスクリプトを実行しません。

誰かがこれを見たことがありますか?それも私のせいではありませんか?なぜ時々?

$file = "http://domain.com/files/".$item_number.".mov";
header( 'Pragma: no-cache' );
header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
header( 'Content-Description: File Download' );
header( 'Content-Type: application/force-download');
//header ('Content-Type: video/quicktime');//doesnt seem to download at all here
header( 'Content-Length: '.filesize( $file ) );
header( 'Content-Disposition: attachment; filename="'.basename( $file ).'"' );
header( 'Content-Transfer-Encoding: binary' );
readfile( $file ); 
exit();

ありがとう、すみません、初めてです。

4

1 に答える 1

3

これにはいくつかの理由が考えられます。

readfile()サーバー リソースは問題ないとおっしゃっていますが、PHPはファイルを送信する前にファイル全体をメモリにロードすると思います。幸いなことに、ドキュメントには、複数のダウンロードで問題が発生するのを防ぐために必ず使用する必要がある優れた解決策があります:)

また、スクリプトの実行時間を無限に設定しましたか?

次はサーバーの設定です。タイムアウト/リソースを大量に消費する理由で接続を閉じている可能性があります。

たとえば、Google Chromes 開発者ツールを使用して、送信しているヘッダーを詳しく調べます。PHP は、いくつかのヘッダーを独自に設定します。session_cache_limiter(false);スクリプトの先頭に配置する必要があります。私の記憶が正しければ、でもExpires: Thu, 19 Nov 1981 08:52:00 GMT... なぜこれが悪いのですか?次に来る;)

Etag および Last-Modified ヘッダーを送信できます。これは、リソースの一意の識別子であり、ダウンロードの再開を可能にします. これについての良い記事を探すことは、ここでいくつかの文章を与えるよりも良いと思います. あなたの場合stat()、PHP関数を使用してEtagを作成できます。

ヘッダーとダウンロードに苦労している人がいます。ここから開始 (またはケースを修正) できます

概要:

  • PHP/サーバーの有効期限/制限/リソース設定を確認してください
  • 必ずバッファリングされたファイルを送信してください
  • ダウンロードの再開を可能にする
  • 送信するヘッダーを確認してください

この後、あなたは元気になるはずです。壊れても再開して…

良い進歩と成功!

于 2012-06-13T01:23:46.523 に答える