2011-06-19 8 views
-1

私はPHP 5.3.6を使用し、以下の私のコードであり、それは私がやりたいことPHPのoutbufferingとヘッダ

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"); 
?> 

エラーを生成されていますが、各ループから表示する内容ですループがアクティブです。 ループが終了すると、以前の出力またはヘッダーをすべてフラッシュし、新しいヘッダーを送信して現在のページをリフレッシュする必要があります。

答えて

1

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

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

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

ヘッダーは、一般的にちょうどメタリフレッシュフォーマットのように見える新しいフォーマットがありますならば、私はそれに気づいてないんだけど、他のヘッダがどのように動作するか違反すると思われる、フォームLocation: ?test.phpを取るリダイレクト(すなわちキー:値)。短いバージョン:ヘッダーが最初に動いてもヘッダが機能しないと思う。

0

プレインハイマーによって示唆されているように、ヘッダーは各ページ出力の前に送信しなければなりません。ヘッダーを使用せずに、単純なリダイレクトに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> 
関連する問題