2011-02-03 72 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()语句。