2

私は次のダムコードを持っています:

<?

echo "<html><br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p></div></html>";
sleep(6);
header('Location: http://google.com/');

?>

6秒間スリープしてからリダイレクトする前に、HTMLコードがブラウザに表示されないのはなぜですか?コードはHTMLコードをまったく出力せず、6秒間待機してから、その場所に送信します。私は何を間違えますか?

4

4 に答える 4

6

これは機能しません。最初のエコーが出力を開始するためです。その後、ヘッダー呼び出しは失敗します。ただし、PHP側のrefreshヘッダーを使用して実行できます。

<?php
header('Refresh: 5;URL=http://www.google.com/'); // refresh header
echo "<html><head>";
// meta refresh
echo "<meta http-equiv=\"refresh\" content=\"5;URL=http://www.google.com/\" />"; 
echo "</head><body><br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p></div></body></html>";
?>
<script type="text/javascript">
// javascript refresh
window.setTimeout(function(){
    location.href="http://www.google.com";
},5000);
</script>

上記のスクリプトでは、3つの処理が行われました。

  1. HTTP更新ヘッダー
  2. メタリフレッシュ
  3. Javascriptの更新

注:メタリフレッシュは非推奨です(例で示しましたが)。HTTPリフレッシュヘッダーをお勧めします。

于 2012-09-06T11:22:28.340 に答える
3

次のようなことをする必要があります(これは機能しません):

<?php

echo "<html><br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p></div></html>";
@ob_flush(); //flush the output buffer
flush(); //flush anything else
sleep(6); //wait
header('Location: http://google.com/'); //redirect

?>

ただし、これ期待どおりに機能しません。コンテンツの送信後にブラウザをリダイレクトすることはできません(PHPはスローしてエラーを出し、これを通知します)

代わりに、次のことを行う必要があります。

<?php

echo "<html><meta http-equiv=\"refresh\" content=\"6;URL='http://YOURURL.com/'\"><br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p></div></html>";

?>

タグ<meta http-equiv="refresh" content="6;URL='http://YOURURL.com/'">は、6秒後に提供されたURLに変更するようにブラウザに指示するHTMLタグです。

メタタグの追加を回避するには、次のようにすることもできます。

<?php
header('Refresh: 6;URL=http://www.YOURURL.com/');
echo "<html><br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p></div></html>"
?>

ただし、安全のために、ヘッダーとメタタグの両方を追加する必要があります。

于 2012-09-06T11:22:04.537 に答える
1

PHPドキュメントから:

通常のHTMLタグ、ファイル内の空白行、またはPHPから実際の出力を送信する前に、header()を呼び出す必要があることに注意してください。include、require、関数、または別のファイルアクセス関数を使用してコードを読み取り、header()が呼び出される前に出力されるスペースまたは空の行があることは非常に一般的なエラーです。単一のPHP/HTMLファイルを使用する場合にも同じ問題が存在します。

したがって、 echoの後にheader()関数を使用することはできません。

代わりにjavascriptまたはmetaタグを使用することをお勧めします。

于 2012-09-06T11:30:58.717 に答える
-1

私はあなたが探していると思いますheader('Refresh: 6; url=http://google.com/'); リダイレクトを行うには

バッファリングとスクリプトスリープは必要ありません。

于 2012-09-06T11:26:04.047 に答える