4

私はそれが可能であることを知っていますが、私はそれを理解できないようです.

数十万の結果を持つ mySQL クエリがあります。結果を送信できるようにしたいのですが、ダウンロードを開始するには応答に content-length ヘッダーが必要なようです。

phpMyAdmin では、データベースをエクスポートしようとすると、すぐにダウンロードが開始されます。FF は不明なファイル サイズとだけ表示されますが、機能します。私はそのコードを見ましたが、それを理解できませんでした。

ヘルプ?

ありがとう。

4

6 に答える 6

10

このドキュメントのセクション 14.14では、HTTP では、セクション 4.4 のルールで禁止されていない限り、転送前にメッセージの長さを決定できる場合はいつでも送信する必要があると述べています。これは、サイズがわからない場合は送信する必要がないことを意味します。

送信しないでください。

すべてのデータが利用可能になる前にデータの一部をブラウザに送信したい場合、出力バッファをフラッシュしますか? ヘッダーがないのではなく、それが問題なのかもしれません。

フラッシュの使用方法は次のとおりです。

  • いくつかの出力を生成し、それをバッファに追加する必要があります
  • これにより、現在のバッファがクライアントに送信されます
  • 1に行く

したがって、クエリが多くの結果を返す場合、たとえば 100 または 1000 の出力を生成してから、フラッシュすることができます。

また、クライアント ブラウザにファイルをウィンドウに表示する代わりに保存するように指示するには、Content-disposition: 添付ファイルヘッダーを使用することもできます。ここの仕様、19.5.1 セクションを参照してください。

于 2009-03-16T12:16:46.183 に答える
2

チャンク転送エンコードを使用できます。基本的に、「Transfer-encoding: chunked」ヘッダーを送信すると、データがチャンク モードで送信されます。つまり、チャンクの長さに続いてチャンクが送信されます。データの終わりまでこれを繰り返し続け、その時点で長さゼロのチャンクを送信します。

詳細はRFC 2616にあります。

于 2009-03-16T13:18:48.797 に答える
1

すべてのコンテンツが生成されるのを待つ gzip を使用している可能性があります。これに関するディレクティブについては、.htaccess を確認してください。

于 2009-03-16T12:29:48.757 に答える
0

FireFox で LiveHTTPHeaders プラグインを使用すると、phpMyAdmin によって送信されるヘッダーとアプリケーションによって送信されるヘッダーの違いを確認できます。何が欠けているのか具体的にはわかりませんが、これはヒントになるはずです。簡単なテストを実行しているヘッダーの 1 つに「Transfer-Encoding: chunked」があり、コンテンツの長さを送信していないこともわかります。まだ持っていない場合は、FireFox プラグインへのリンクを次に示します: LiveHTTPHeaders

于 2009-03-16T12:18:28.817 に答える
0

httpコンテンツの長さはSHOULDフィールドなので、ドロップできます...しかし、転送エンコーディングを設定する必要があります。

于 2009-03-16T12:20:03.163 に答える
0

Content-Lengthヘッダー フィールドを設定する必要はありません。このヘッダー フィールドは、期待する必要があるデータの量をクライアントに伝えるためのものです。実際、「間違った」値により、クライアントが一部のデータを破棄する可能性があります。

于 2009-03-16T12:15:23.067 に答える