当你按下提交时,它似乎应该在下一个之前评估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 :(得分:3)
它首先评估XYZ,然后移动到脚本中的下一行,用ABC标题覆盖它。
在设置标题后使用exit来终止脚本执行
修改强>
header()不会自动为您执行重定向,因为您可能希望发送多个不同的标头。它只是将一系列响应头排队,为脚本输出响应时做好准备。使用exit将触发实际发送响应标头
答案 1 :(得分:3)
您使用2个不同的值发送相同的标头,以便第2个覆盖第一个!
删除foo()
调用或在函数中添加exit()
语句。