2012-01-13 101 views
-3

Possible Duplicate:
Headers already sent by PHP替代PHP頭?

我有一個處理的註冊類文件並註冊成功後,我想將它們重定向到另一頁,但如果我使用類似:

if(!isset($_SESSION['referer'])) { 
     $_SESSION['referer'] = "home.php"; 

     header("Location: " . $_SESSION['referer']); 
     exit(); 
    } 

我得到的錯誤:

Warning: Cannot modify header information - headers already sent by ... 

是否有替代(非Java腳本)的方式重定向用戶到另一個頁面?

這裏是我當前的代碼流:

// index.php file 
<?php 
include('header.php'); 
include_once('classes/class.signup.php'); 

$signUp = new SignUp(); 

// redirect in signup.php class 
if(!isset($_SESSION['referer'])) { 
    $_SESSION['referer'] = "home.php";  
    header("Location: " . $_SESSION['referer']); 
    exit(); 
} 
+3

另一種方法是在header()之前阻止任何輸出。輸出任何內容是毫無意義的,以防用戶**從不**看到 – zerkms 2012-01-13 02:20:20

+0

以確保我不會意外發送標題數據,因此我永遠不會關閉我的''<?php'標記。 – davogotland 2012-01-13 02:24:33

回答

-2

你可以用HTML元標記嘗試。第一個值是以秒爲單位的延遲,第二個是您想要重新映射的網址。

<meta HTTP-EQUIV="REFRESH" content="0; url=http://www.yourdomain.com/index.html"> 
+0

不,如果他使用PHP,他應該在應該重定向的代碼部分之前解決內容輸出的問題。除此之外,meta-refreh不如服務器端重定向可靠。 – Connum 2012-01-13 09:15:39

0

你最有可能得到這個錯誤,因爲地方調用頭()函數之前,你輸出的東西到瀏覽器,例如通過回聲。您可以使用ob_start()和ob_end_flush()的組合作爲快速修復,但也許您應該重新考慮應用程序的流程。對於ob(輸出緩衝區)函數,請看這裏:http://www.php.net/manual/en/function.ob-start.php

編輯:甚至一個空格或其他空白php打開或關閉之前可以導致相同的效果。

Edit2:在您的示例中無法真正看到代碼中是否有任何問題。嘗試輸出緩衝區功能,看看是否有幫助。不想使用它們?比你必須追查你已經發送的輸出。

0

您可以使用您的網頁瀏覽器的「查看源代碼」函數來調查在異常之前是否有寫入頁面輸出的雜散字符。也許你的一個包含文件是罪魁禍首。