2013-07-25 41 views
2

爲什麼我的代碼在重定向之前沒有顯示/打印「重定向現在....」文本。請記住,我不想使用javascript或http_redirect()重定向後來會打破我的邏輯流程。php標題重定向沒有在重定向之前回顯文本

<?php 
ob_start(); 

echo "redirecting now ...."; 
sleep(3);  
    header("Location:index.html"); 
    exit(); 


ob_end_flush(); 
?> 

回答

2

使用這個代替

<?php 
ob_start(); 

echo "redirecting now ...."; 
header("Refresh: 3; index.php"); 
exit(); 

ob_end_flush(); 
?> 
+0

它現在正在工作我認爲有一個錯誤在我的代碼 –

+0

它是當我測試它:) – mavili

3

試試這個

<?php 
    echo "redirecting now ...."; 
    print "<META http-equiv='refresh' content='3;URL=index.html'>"; 
    exit; 
?> 
+0

PHP的「header()」會發送一個HTTP標頭 - 這些標籤在主響應後不會被瀏覽器讀取或處理。 http://www.techrepublic.com/blog/software-engineer/structure-of-an-http-response/ – watermanio

+0

所以簡而言之,使用php頭部函數,你不能打印任何東西之前重定向 –

+0

我認爲這是最好的重定向頁面的方式,你可以打印任何東西之前重定向也可以設置秒等待... –

1

這是行不通的,在這方面(IMO)使用ob_start()的原因是,如果你有問題,導致該頭的頭之前不可避免的輸出()從工作。

它不起作用的原因是因爲ob_start()捕獲所有的輸出(在這種情況下,回聲「重定向現在....」;),並不吐出,直到ob_end_flush()。在腳本到達ob_end_flush()之前,您使用header()重定向頁面。

1

您使用header()

前斜面輸出任何HTTP報頭應該從服務器的任何輸出之前發送。 如果您之前有輸出,服務器將會輸出如'Headers already been sent'的警告。