-1

私はphp5.3.6を使用していますが、以下は私のコードであり、エラーが発生します

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

<?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 "</pre>";

ob_end_flush();

header("refresh:5;url=test.php" );
?>

私がやりたかったのは、ループがアクティブなときに各ループのコンテンツを表示することです。次に、ループが終了したら、以前のすべての出力またはヘッダーをフラッシュし、新しいヘッダーを送信して現在のページを更新する必要があります。

4

2 に答える 2

1

短いバージョンでは、できません。コンテンツの後にヘッダーを送信することはできません。

ユーザーがクリックしてページを更新できるリンクを最後に印刷できます。または、生成に一定の時間 (たとえば 5 分) かかる場合は、5 分 1 秒後に表示される HTML メタ リフレッシュ タグをページに配置できます。

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

ヘッダー リダイレクトは通常、 の形式を取りLocation: ?test.phpます。メタ リフレッシュ形式とまったく同じように見える新しい形式がある場合、私はそれを認識していません。また、他のヘッダーの動作方法 (つまり、キー: 値) に違反しているように見えます。短いバージョン:ヘッダーが最初に実行されたとしても、ヘッダーは機能しないと思います。

于 2011-06-19T13:21:53.073 に答える
0

preinheimerが提案しているように、ヘッダーは各ページ出力の前に送信する必要があります。ヘッダーを使用せずに、単純なリダイレクトに1行のJavaScriptコードを使用できます。これはあなたのための解決策かもしれません:

<?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 "</pre>";

    # The php code has ended and the javascript code is ready for redirecting... (external to php tags)
?>
<script type="text/javascript">
    window.location="http://www.example.com/";
</script>
于 2011-06-19T14:10:25.340 に答える