2

fastcgiでファイルのアップロードとダウンロードを試みています。

sendfile() を使用するには、クライアント (ブラウザー) への Web サーバーのオープン ソケットが必要です。

fastcgi はそれを私に渡しません (私はそうは思いません)。

ブラウザのソケット記述子を取得する方法がわかりません。

また、リダイレクトや新しい接続を開かずに別のアプローチを受け入れることもできます。

助けていただければ幸いです

4

2 に答える 2

2

FastCGI でブラウザーへのソケットを取得しません。直接取得する唯一のソケットは Web サーバーに接続されており、生データだけでなく、FastCGI データ フレームを想定しています。

ファイル ダウンロードの最も一般的な解決策はX-Sendfile ヘッダーsendfile()です。これは、応答の代わりに (おそらく内部的に何かを使用して) ファイルを吐き出すよう Web サーバーに指示します。Lighttpd によって導入され、nginx によってネイティブにサポートされ、mod_xsendfile を介して Apache によってサポートされます。

于 2012-05-25T01:04:48.377 に答える
1

ソケットとファイルはほとんど同じように処理されるので、実際のソケットの代わりに標準出力ファイル記述子を出力「ソケット」として使用できることに注意してください。

#include <unistd.h>

int in_fd = open(...);

sendfile(STDOUT_FILENO, in_fd, NULL, length_of_file);
于 2012-05-25T05:12:37.840 に答える