【问题标题】:Why is the exit() method manually being called while it is unreachable anyways because of header("location: ...")?为什么由于 header("location: ...") 而无论如何都无法访问 exit() 方法?
【发布时间】:2013-11-10 07:52:54
【问题描述】:

正如标题所述:为什么人们在 header("...") 之后调用 exit() 方法,而该方法无论如何都无法访问?或者它是否可以访问,添加它是否重要?

例子:

header("location: $url");
exit();

【问题讨论】:

  • 这样它就不会执行页面上的其余代码。
  • 如果header() 停止执行其余代码,那么您将只能发送一个标头

标签: php redirect header http-redirect


【解决方案1】:

php 解释器在处理header() 命令时只向浏览器发送一个标头。这意味着它将Location:... 发送到浏览器但继续处理php 文件。 所以你需要exit() 来停止处理剩余的文件。

【讨论】:

    【解决方案2】:

    header() 函数不会终止您的应用程序。 header() 调用之后的任何代码,即使是 header("Location: …"),仍然会被执行;它的输出恰好对网络浏览器不可见。因此,绝对有必要在重定向后调用exit()

    【讨论】:

      【解决方案3】:

      因为header 发送了一个HTTP 头但并没有停止应用程序的执行,但是exit 实际上是在告诉PHP 解释器退出应用程序,所以它有点竞争​​条件。如果您告诉应用程序在调用 exit 之前等待大约 5 秒,它很可能不会执行,具体取决于浏览器响应 HTTP 标头的速度。

      【讨论】:

        【解决方案4】:

        header()call 不会立即停止脚本的执行。如果你重定向但你不调用exit(),那么代码总是被执行。

        为了演示这个问题,可以考虑下面的代码:

        header('Location: http://google.com');
        file_put_contents('file.txt', 'I was executed, YAY!');
        

        它会将您重定向到 Google,但也会在 file.txt 中输出文本。它证明header() 调用不一定会停止脚本执行。您应该始终使用exit() 来确保脚本不会被进一步执行。

        【讨论】:

        • +1 例如,我必须在我的网络应用程序中进行一些认真的编辑!
        • @Houssni:哈哈。干杯:)
        猜你喜欢
        • 2010-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-16
        • 1970-01-01
        • 2016-12-11
        • 2019-05-31
        • 2012-03-11
        相关资源
        最近更新 更多