2012-09-06 67 views
2

我有以下啞代碼:PHP問題與睡眠()和重定向

<? 

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/'); 

?> 

爲什麼沒有HTML代碼段中熟睡6秒,然後重定向之前顯示在瀏覽器?代碼完全不輸出HTML代碼,等待6秒鐘然後將我發送到該位置。我做錯了什麼?

+0

你沒有做任何錯誤的睡眠功能應該像那樣工作 – Nagri

+0

不行!頭文件已經被'echo'響應提交。 – Vishal

回答

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/'">標記是一個HTML標籤告訴瀏覽器更改爲所提供的網址6秒

後,爲了避免增加meta標籤,你也可以這樣做:

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

但要是安全你應該添加標題和元標記!

+2

如果你這樣做了,你的頭文件位置將不起作用,因爲頭文件已經被髮送。 – tomsv

+0

內容傳輸後無法發送標題 –

+0

我知道,我在回答中寫到了這件事,也許您在大約1分鐘之前沒有重新加載我的編輯 –

6

這不起作用。因爲第一個回聲將開始輸出。在那個頭部調用之後就會失敗。但是你可以在PHP端使用刷新標題來完成。

<?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刷新

注:元刷新是deprecated(雖然我例中已示出)。建議使用HTTP Refresh標頭。

+0

是的,這很有用,謝謝! – bsteo

-1

我認爲您在尋找header('Refresh: 6; url=http://google.com/');做重定向

不需要緩衝和腳本睡眠。

1

PHP documentation來自:

記住header()函數被髮送 任何實際輸出之前,必須被調用,或者通過正常的HTML標記,在一個文件中的空行,或從PHP。 使用include或require, 函數或其他文件訪問函數讀取代碼,並在調用header()之前輸出空格或空行 是非常常見的錯誤。使用單個PHP/HTML文件時存在相同的問題 。

所以你不能使用頭()功能呼應

我建議你改用javascript或meta標籤。