2011-02-03 46 views
0

當你推送提交時,它似乎應該在下一個之前評估foo()中的頭部,但是下一個會先執行?執行/評估的標頭順序

<?php 

    function foo(){ 
     header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?message=XYZ"); 
    } 

    if($_POST['action'] == 'gogogo'){ 
     foo(); 
     header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?message=ABC"); 
    } 

    echo "<form action='".$_SERVER['SCRIPT_NAME']."' method='post'>"; 
    echo "<input type='hidden' name='action' value='gogogo' />"; 
    echo "<input type='submit' />"; 
    echo "</form>"; 

    echo "Contents of \$_GET['message']: "; 
    if(isset($_GET['message'])) { 
     echo $_GET['message']; 
    } else { 
     echo "Empty"; 
    } 

?> 
+0

請勿在此處使用「已解決」的主題標記,而應將其標記爲已接受。固定。 – 2011-02-03 09:48:13

回答

3

它首先評估XYZ,然後移動到腳本中用ABC標題覆蓋它的下一行。後

使用退出設置頁眉終止腳本執行

編輯

頭()不會自動執行重定向你,因爲你可能要派幾個不同的頭。它只是排列一系列響應頭文件,準備好在腳本輸出響應時進行準備。使用退出將觸發響應頭的實際發送

+0

我沒有意識到它什麼時候實際評估header()調用,但現在正在閱讀PHP的網站,因爲你們都在同一時間回答它,我要去Eeny,meeny,miny,moe – Shane 2011-02-03 09:23:37

3

您發送具有2個不同值的相同標頭,所以第二個覆蓋第一個!

在函數中刪除foo()調用或添加exit()語句。