2017-03-11 106 views
2

打算在PHP服務器代碼中調用郵件,然後返回到HTML頁面。 寫了下面的服務器代碼:PHP - 返回到HTML表格

<!DOCTYPE HTML> 
<HEAD> 
    <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 
</HEAD> 
<BODY> 
    <?php 
    $referer = filter_input(INPUT_SERVER, 'HTTP_REFERER'); // real referrer detected 
    // do something or nothing 
    header("Location: $referer"); 
    ?> 
</BODY> 

此代碼產生一個錯誤「警告:不能更改頭信息 - 已經...發送了頭」。 爲什麼?

+0

http://stackoverflow.com/questions/8028957/how-to-fix-headers -已經-psent-error-in-php是一個可能的副本。 –

+0

正如其名稱所暗示的,標題是在內容之前發送的。但是當你的PHP代碼執行時,一些內容('<?php'之前的HTML)被髮送回瀏覽器。發送內容首先會刷新標題。一些內容發送後不能再發送標題。將您的PHP代碼移到文件的頂部。把'exit()'放在'header(「Location ...」)之後''因爲當你發回重定向時不需要內容。閱讀更多關於['header()'](http://php.net/manual/en/function.header.php)的PHP函數。 – axiac

回答

1

header()在正常使用中,在發送任何實際輸出之前,必須調用,
                 ,你使用它之前已經發送數據。

☼►Solution :  以操縱並有能力使用header()函數任何你想要的能力..
那麼PHP具有輸出控制功能,讓你可以在控制輸出(如HTML代碼)被緩存在服務器中,直到您發送它。在最終使用在開始ob_startob_end

與此✔替換代碼:所以按照下面的說明下

<?php 
ob_start(); 
?> 
<!DOCTYPE HTML> 
<HEAD> 
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 
</HEAD> 
<BODY> 
<?php 
$referer = filter_input(INPUT_SERVER, 'HTTP_REFERER'); // real referrer detected 
// do something or nothing 
header("Location: $referer"); 
?> 
</BODY> 

<?php 
ob_end_flush(); 
?> 

警告:使確保在<?php ob_start();
之前沒有空白,否則它將拋出相同的錯誤。
.........................................
✘ - 錯誤方式:

<?php 
ob_start(); ?> 

✔ - 在方式:

<?php 
ob_start(); ?> 
1

您的PHP代碼位於被視爲輸出的HTML中間。一旦生成輸出,header()等功能將不再工作,並會返回錯誤。解決方案是在任何html之前將php代碼移到文件的頂部。

<?php 
$referer = filter_input(INPUT_SERVER, 'HTTP_REFERER'); // real referrer detected 
// do something or nothing 
header("Location: $referer"); 
?> 
<!DOCTYPE HTML> 
<HEAD> 
    <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 
</HEAD> 
<BODY> 
</BODY>