执行/评估的标题顺序

时间:2011-02-03 09:02:11

标签: php

当你按下提交时,它似乎应该在下一个之前评估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";
    }

?>

2 个答案:

答案 0 :(得分:3)

它首先评估XYZ,然后移动到脚本中的下一行,用ABC标题覆盖它。

在设置标题后使用exit来终止脚本执行

修改

header()不会自动为您执行重定向,因为您可能希望发送多个不同的标头。它只是将一系列响应头排队,为脚本输出响应时做好准备。使用exit将触发实际发送响应标头

答案 1 :(得分:3)

您使用2个不同的值发送相同的标头,以便第2个覆盖第一个!

删除foo()调用或在函数中添加exit()语句。