Как отправить заголовок клиенту перед выполнением скриптов php - PullRequest
1 голос
/ 23 июня 2011

Как отправить заголовок клиенту перед выполнением сценариев 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 ]

1 голос
/ 23 июня 2011

Я не уверен, как работает 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 или любую другую выходную буферизацию.

0 голосов
/ 23 июня 2011

Используйте ob_start() и выведите что-нибудь, затем ob_flush; затем выведите еще немного, затем ob_flush снова.

0 голосов
/ 23 июня 2011

В вашем php-скрипте создайте заголовки, начните писать HTML-код, затем очистите и продолжайте создавать остальную часть HTML.

0 голосов
/ 23 июня 2011

ob_flush() Функция мгновенно очищает выходной буфер. Вы ищете что-то подобное?

...