PHP:使用exit(); 或者死(); 标题后("位置:");

Aar*_*ron 17 php exit die

我有一个简单使用的用户登录/注册系统

// execute queries, set cookies, etc. here
header("Location: " . getenv("HTTP_REFERER"));
Run Code Online (Sandbox Code Playgroud)

我最近阅读了一篇关于exit();并且die();不知道我应该使用这些内容的帖子.根据我的理解,他们让它结束PHP?那是对的吗?我能为此努力的最佳方法是什么,只需在header()之后直接添加其中一个函数; 执行我有吗?

我有AJAX,通过我的login.php/register.php阅读jQuery,这会以任何方式影响吗?

编辑:除了header();之后,我应该在哪里使用exit();或者die();函数?并且exit();更多地用于PHP,而die();更多用于Perl?

小智 35

我一直在寻找答案.我找到了什么:

为什么die()或exit():

如果header('Location: http://something')在脚本可能继续导致意外行为后未放置die()或exit().例如,这可能导致您实际想要通过重定向(HTTP 301)阻止您公开的内容.对于最终用户而言,上述内容可能不是直接可见的,因为浏览器可能不呈现它(由于301).结论,exit()和die()函数阻止脚本继续.

区别:

我也想知道函数之间的区别,因为似乎没有.但是,在PHP中,Header输出存在明显差异.在下面的例子中,我选择使用不同的标题,但为了显示exit()和die()之间的区别并不重要.

退出()正在行动中

<?php
    header('HTTP/1.1 304 Not Modified');
    exit();
?>
Run Code Online (Sandbox Code Playgroud)

结果是:

HTTP/1.1 304 Not Modified 
Connection: Keep-Alive 
Keep-Alive: timeout=5, max=100
Run Code Online (Sandbox Code Playgroud)

Die()在行动中

<?php
    header('HTTP/1.1 304 Not Modified');
    die();
?>
Run Code Online (Sandbox Code Playgroud)

结果是:

HTTP/1.1 304 Not Modified 
Connection: close
Run Code Online (Sandbox Code Playgroud)

区别

因此,die()关闭连接而exit()不关闭.无论您是否要保持连接打开或关闭它,都取决于性能.两者都有优点和缺点,取决于您的具体要求.

Wiki上的HTTP持久连接

  • [退出和死亡是相同的](https://www.reddit.com/r/PHP/comments/5hdtkc/seven_syntax_you_can_choose_in_php/dazk1k1/) (4认同)
  • 被否决,因为“die”和“exit”确实“相同”。 (4认同)
  • 刚刚测试了一下,“exit”和“die”的工作方式相同,它们都关闭连接。 (3认同)

Tim*_*mur 10

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

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

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