1. まず私の使用シナリオについてお話します。つまり、クライアントはサーバーのインターフェイスを使用してファイルをダウンロードします。サーバー側(cè)はバイナリを直接取得して出力します。 echo binary以外にもっと合理的な戻り方法はありますか?
2. PHP header('Content-Length: '.strlen($Download)); を使用して Content-Length を設(shè)定します。論理的に言えば、http リクエスト自體が出力のサイズに応じて Content-Length を設(shè)定するためです。設(shè)定を変更した場(chǎng)合でも、最終的に要求された Content-Length は依然として実際のサイズに基づいています。
3. もう 1 つの問題は、10M ファイルのバイナリをリクエストしていることです。ブラウザでリクエストした場(chǎng)合、Content-Length ヘッダーはまったく返されません。クライアントからのリクエスト時(shí)には、Content-Length を正常に返すことができます。 Content-Lengthの返卻もリクエストメソッドに関係するのでしょうか?
ソースはバイナリ ストリームですか?
1. ファイルの場(chǎng)合は、実際のパスを非表示にするために、次の方法を試してください:
高効率readfile($filename)
比echo
テクノロジーX-SendFile
を使用する
X-SendFile
header
設(shè)置Content-Length
是有效的,返回真實(shí)的大小即可。這個(gè)在一些下載軟件比較重要,比如迅雷。
它會(huì)檢測(cè)最終大小是否符合Content-Length
で応答し、ブラウザはそれを受け入れます。 Content-Length
為參照,
但是當(dāng)網(wǎng)絡(luò)很糟糕的時(shí)候,超時(shí)、斷流了,瀏覽器也會(huì)停止下載,最終得到的是一個(gè)不完整的文件,這個(gè)下載國(guó)外軟件的時(shí)候很常見。
如果實(shí)際大小超過了Content-Length
が返されなくても、ブラウザはダウンロードできます。サーバーが切斷されると、ブラウザはダウンロードを終了します。 Content-Length