php outbuffering и заголовок - PullRequest
0 голосов
/ 19 июня 2011

Я использую php 5.3.6, ниже приведен мой код, и он выдает ошибку

Warning: Cannot modify header information - headers already sent by (output started at ............

<code><?php
ob_implicit_flush(true);

print "<pre>";
$loop = true;
$counter = 0;
while ($loop) {
    $counter++;

    // some code
    print "some output of code. \n";

    if ($elapsedTime > 300) {
        $loop = false;
        print "5 minute passed and loop ended. \n";
    }
}
print "
"; ob_end_flush (); заголовок ("refresh: 5; url = test.php"); ?>

Что я хотел сделать, так это отображать содержимое каждого цикла, пока он активен. затем, когда цикл заканчивается, мне нужно очистить все предыдущие выходные данные или заголовок и отправить новый заголовок, чтобы обновить текущую страницу.

Ответы [ 2 ]

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

Короткая версия, вы не можете. Вы не можете отправлять заголовки после содержимого.

В конце вы можете распечатать ссылку, по которой пользователь может щелкнуть, чтобы обновить страницу. Или, если генерация займет фиксированное количество времени (скажем, 5 минут), вы можете поместить HTML-тег обновления HTML на страницу, которая идет через 5 минут и 1 секунду.

http://en.wikipedia.org/wiki/Meta_refresh

Перенаправления заголовка обычно принимают форму Location: ?test.php, если есть новый формат, который выглядит точно так же, как формат мета-обновления, я не знаю об этом, и это может нарушить работу других заголовков (а именно: key: значение). Короткая версия: я не думаю, что заголовок будет работать, даже если он пойдет первым.

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

Как предполагает preinheimer, заголовок должен отправляться перед каждым выводом страницы.Без использования заголовков вы можете использовать одну строку кода JavaScript для простого перенаправления.Это может быть решением для вас:

<code><?php

    print "<pre>";
    $loop = true;
    $counter = 0;
    while ($loop) {
        $counter++;

        // some code
        print "some output of code. \n";

        if ($elapsedTime > 300) {
            $loop = false;
            print "5 minute passed and loop ended. \n";
        }
    }
    print "
"; # Код php закончился, и код javascript готов к перенаправлению ... (внешний по отношению к тегам php)?>
...