1

PHPスクリプトを実行する前にクライアントにヘッダーを送信する方法は?

私のスクリプトは完了するまでに時間がかかり、クライアントはこの期間中に何も受け取りません。

<?

header("HTTP/1.1 200 OK");
header("Date: Thu, 23 Jun 2011 10:16:31 GMT");
header("Content-Type: application/octet-stream");
header("Content-Length: 12275768");
header("Accept-Ranges: bytes");
header('Content-Disposition: attachment; filename="Untitled-1.bmp"');
header("Content-Transfer-Encoding: binary");
header("Connection: close");

//Send headers now

//because my php script take many time to finish
//because it downloads a file from a remote server

.
.
.

?>
4

4 に答える 4

1

passthruどのように機能するのか、コマンドの出力が何らかの形でバッファリングされているのかどうかはわかりません。しかし、ここfopenでは、リクエスト ヘッダー フィールドのストリーミング コンテキストと、明示的なフラッシュを使用したチャンク転送コーディングを使用した別の例を示します。

header("HTTP/1.1 200 OK");
header("Date: Thu, 23 Jun 2011 10:16:31 GMT");
header("Content-Type: application/octet-stream");
header("Accept-Ranges: bytes");
header('Content-Disposition: attachment; filename="Untitled-1.bmp"');
header('Content-Transfer-Encoding: chunked');
header("Connection: close");

$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n"
  )
);
$context = stream_context_create($opts);
$fp = fopen('http://www.example.com', 'r', false, $context);
while (($buffer = fread($fp, 512)) !== false) {
    echo sprintf("%X", strlen($buffer)), "\r\n", $buffer, "\r\n";
    flush();
}
echo "0\r\n\r\n";
flush();

またはその他の出力バッファリングを使用しないようにしてください。ob_start

于 2011-06-23T12:43:35.913 に答える
0

ob_flush()関数はすぐに出力バッファをフラッシュします。このようなものをお探しですか?

于 2011-06-23T10:25:54.670 に答える
0

何かを使用ob_start()して出力し、次にob_flush; 次に、さらに出力してから、ob_flushもう一度出力します。

于 2011-06-23T10:30:52.333 に答える
0

PHP スクリプトでヘッダーを作成し、html コードの作成を開始してからフラッシュし、残りの HTML の作成を続けます。

于 2011-06-23T10:36:35.497 に答える