我简直不敢相信我盯着下面的代码看了这么久:
public function send($boxMemUsed, $boxMemAllocate) {
$this->timeSent = gmmktime();
if ($boxMemUsed >= $boxMemAllocate)
header("Location: ".HOME_PAGE.PM_PAGE."?view=inbox&status=Memory full - please delete old messages");
$validation = $this->_validateMessage();
if ($validation == 'Invalid User')
header("Location: ".HOME_PAGE.PM_PAGE."?view=compose&status=Errors&error=".$validation);
---->>如果我在这里添加die(),它会重定向到上面的头,就像if语句正常工作一样
else
$sender = $this->_database->sendPMessage(get_object_vars($this));
if ($sender)
header("Location: ".HOME_PAGE.PM_PAGE."?view=sentbox&status=Message Sent!");
else
header("Location: ".HOME_PAGE.PM_PAGE."?view=compose&status=Errors&error=Send Error");
}
如果我在结束函数前加上die,它会在If ($sender)条件中捕获。
我正在编写的一个私人消息程序中的简单函数。好的,那么,我进入活动页面,没有错误,我输入了一个不正确的用户名,它应该被$this->_validateMessage()调用捕获-是的,我直接在die()'d之后var_dump结果。然后我检查了if条件句是否正确地捕获了它,它是-它重定向了我…??但是,然后我删除测试var_dumps和die在if结束时,它不会被相同的if条件捕获(如果我们谈论的是if ($validation == 'Invalid User')一个)-它会被else ($sender)条件捕获。所以我决定只是在验证条件结束时添加die(),瞧,它重定向到if行内的标题,就像它应该的那样(显示我列出的get错误)。所以我尝试将骰子添加到函数的末尾-不,它不会被条件语句捕获。我完全被难住了。有人看到我没看到的吗?我甚至绝望地添加了花括号,尽管我知道在单行条件语句中不需要它们——仍然不行。谢谢你的帮助。
当您调用header('Location: ...')
时,即使在客户端遵循重定向之后,页面上的其余代码仍继续在服务器上执行。如果这种行为不可取(通常不可取),则在每次调用header('Location: ...')
之后对exit;
进行调用。我怀疑这样做将使您的脚本按照您的期望运行。
我总是在使用重定向头或出口后放置die();
;Asaph推荐的方法也可以。还要确保添加花括号,并为任何空格添加%20或使用urlencode($sting)
if ($boxMemUsed >= $boxMemAllocate) {
header("Location: ".HOME_PAGE.PM_PAGE."?view=inbox&status=".urlencode("Memory full - please delete old messages"));
die();
}
我喜欢使用die的一个原因是我可以打印错误信息用于调试:
die('There was an error on line number: '.__LINE__);