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

时间:2011-12-29 09:26:03

标签: php exit die

我有一个只使用

的用户登录/注册系统
// execute queries, set cookies, etc. here
header("Location: " . getenv("HTTP_REFERER"));

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

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

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

6 个答案:

答案 0 :(得分:31)

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

为什么要死()或退出():

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

差:

我也想知道这些功能之间的区别,因为似乎没有。但是,在PHP中,Header输出存在明显差异。 在下面的例子中,我选择使用不同的标题,但为了显示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

Die()在行动

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

结果:

HTTP/1.1 304 Not Modified 
Connection: close

差分

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

HTTP persistent connections on Wiki

答案 1 :(得分:8)

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

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

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

答案 2 :(得分:4)

答案已被接受,但似乎每个人都错过了问题中明显的WTF:

header("Location: " . getenv("HTTP_REFERER"));
  1. 用户代理

  2. 可选择返回referer
  3. 很容易伪造

  4. 没有告诉用户登录失败的方法

  5. 没有身份验证失败的HTTP语义通信

  6. 虽然环境变量HTTP_REFERER应该与请求标头变量相同,但它没有在RFC 3875中指定,因此即使在请求中提供给Web服务器的地方,getenv(“HTTP_REFERER”)也可能返回不同的值

答案 3 :(得分:2)

在脚本结束时调用header()时,无需拨打exit(),也不需要die(),因为:

  

一旦脚本执行结束,服务器的链接将立即关闭,除非通过显式调用mysql_close()将其关闭。 - php.net/function.mysql-connect

答案 4 :(得分:1)

好的,从最后一个答案开始已经很长时间了。无论如何:D我不知何故遇到了类似的问题,看看我的解决方案是什么:

die( Header( "Location: mytarget.php?arg1=foobar" ) );
两只一石二鸟似乎对我有用。

答案 5 :(得分:0)

for($i = 0; $i < 10; $i++)
{
    if ($i == 2)
    {
        exit("\n Using exit(), We are done");
    }
}

现在让我们使用die();来看同一示例

for($i = 0; $i < 10; $i++)
{
    if ($i == 2)
    {
        die("\n Using die(), We are done");
    }
}

每一个的输出分别是:“使用exit(),使用die()完成,我们完成”。现在让我们尝试其中的每个输出数字。

for($i = 0; $i < 10; $i++)
{
    if ($i == 2)
    {
        exit(-1);
    }
}

使用die()查看同一示例的输出

for($i = 0; $i < 10; $i++)
{
    if ($i == 2)
    {
        die(-1);
    }
}

这些示例是使用文本编辑器编辑的。以上两种情况的输出均为“工具已完成,退出代码为-1”。

因此,对于“ php中die()和exit()之间的区别是什么”)的诚实回答是–这两个函数之间没有一个明显的区别。它们都是相同的,一个是另一个的别名。如果你们中的任何一个都能发现真正的明显区别,那么如果您可以将其发布在此博客的评论部分中,我将不胜感激。

直到下一次,快乐的PHP编程!

相关问题