PHP: 利用 exit();或 die();在 header(“位置: ”) 之后);

2022-08-30 20:24:01

我有一个用户登录/注册系统,它只使用

// execute queries, set cookies, etc. here
header("Location: " . getenv("HTTP_REFERER"));

我最近读了一篇关于这篇文章,并不知道我应该使用这些。据我所知,他们让它结束了PHP?这是对的吗?我能做到这一点的最好方法是什么,只需在head()之后直接添加这些函数之一即可;我有执行力吗?exit();die();

我有AJAX,jQuery通过我的登录.php/注册.php,这会受到任何影响吗?

编辑:除了在 header();之后,我还应该在哪里使用 or 函数?在PHP周围使用更多,而在Perl周围使用更多?exit();die();exit();die();


答案 1

我也一直在寻找这方面的答案。我发现:

为什么是 die() 或 exit():

如果你没有在你的脚本后面放一个die()或exit(),你的脚本可能会继续导致意外的行为。例如,这可能会导致您实际上希望通过重定向(HTTP 301)阻止的内容被泄露。上述内容对于最终用户可能不直接可见,因为浏览器可能无法呈现它(由于301)。结论,exit() 和 die() 函数会阻止脚本继续。header('Location: http://something')

差异:

我还想知道函数之间的区别,因为似乎没有。但是,在 PHP 中,标头输出存在明显差异。在下面的示例中,我选择使用不同的标头,但为了显示 exit() 和 die() 之间的区别,这无关紧要。

退出() 在操作中

<?php
    header('HTTP/1.1 304 Not Modified');
    exit();
?>

结果在:

HTTP/1.1 304 Not Modified 
Connection: Keep-Alive 
Keep-Alive: timeout=5, max=100

模具() 在行动

<?php
    header('HTTP/1.1 304 Not Modified');
    die();
?>

结果在:

HTTP/1.1 304 Not Modified 
Connection: close

差异

因此,die() 关闭连接,而 exit() 则不关闭连接。这取决于性能,是要保持连接打开还是关闭连接。两者都有优点和缺点,取决于您的特定要求。

维基上的 HTTP 持久连接


答案 2

http://php.net/manual/en/function.exit.php

http://php.net/manual/en/function.die.php

此函数用于中断脚本执行。您需要在 之后使用或停止执行脚本,因为在其他情况下,您的脚本将执行到最后,这可能会导致一些意外行为。exitdieheader("Location: " . getenv("HTTP_REFERER"));


推荐