1. まず私の使用シナリオについてお話します。つまり、クライアントはサーバーのインターフェイスを使用してファイルをダウンロードします。サーバー側はバイナリを直接取得して出力します。 echo binary以外にもっと合理的な戻り方法はありますか?
2. PHP header('Content-Length: '.strlen($Download)); を使用して Content-Length を設定します。論理的に言えば、http リクエスト自体が出力のサイズに応じて Content-Length を設定するためです。設定を変更した場合でも、最終的に要求された Content-Length は依然として実際のサイズに基づいています。
3. もう 1 つの問題は、10M ファイルのバイナリをリクエストしていることです。ブラウザでリクエストした場合、Content-Length ヘッダーはまったく返されません。クライアントからのリクエスト時には、Content-Length を正常に返すことができます。 Content-Lengthの返却もリクエストメソッドに関係するのでしょうか?
ソースはバイナリ ストリームですか?
1. ファイルの場合は、実際のパスを非表示にするために、次の方法を試してください:
高効率
またはreadfile($filename)
比echo
テクノロジー
実際にバイナリ ストリームである場合は、最初にファイルにキャッシュしてから、それを試してみることもできますX-SendFile
を使用する
2、X-SendFile
3、ブラウザはheader
设置Content-Length
是有效的,返回真实的大小即可。这个在一些下载软件比较重要,比如迅雷。它会检测最终大小是否符合
Content-Length
で応答し、ブラウザはそれを受け入れます。
4 なので、Content-Length
为参照,但是当网络很糟糕的时候,超时、断流了,浏览器也会停止下载,最终得到的是一个不完整的文件,这个下载国外软件的时候很常见。
如果实际大小超过了
Content-Length
が返されなくても、ブラウザはダウンロードできます。サーバーが切断されると、ブラウザはダウンロードを終了します。
Content-Length