3

你好我有这个功能

function fail($pub, $pvt = '')
{
    global $debug;
    $msg = $pub;
    if ($debug && $pvt !== '')
        $msg .= ": $pvt";

    $_SESSION['msg'] = $msg;
    header ("Location: /voting/"); 
    exit;
}

该页面应该在到达退出命令之前重定向吗?但是,如果没有 exit 命令,该功能将无法正常工作(即使它应该已经重定向,它也会继续运行)。如果有人知道,您能否解释为什么如果函数没有退出,即使在这两种情况下它都会重定向,代码为什么会继续?

4

4 回答 4

7

浏览器在脚本结束后收到整个响应后才会重定向,而 PHP 脚本当然不会在浏览器重定向时停止,因此在浏览器应该重定向时结束脚本是最好的做法。

于 2012-07-05T08:07:02.560 回答
4

'header' 函数在最终输出中添加了一个标头,该标头将发送到浏览器,因此重定向实际上发生在客户端。这就是为什么您可以在“重定向”之前继续执行代码的原因。'exit' 构造(不是函数)是为了避免这种情况。

php 文档

<?php
header("Location: http://www.example.com/"); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;
?>
于 2012-07-05T08:12:47.723 回答
0

是的,但是退出至关重要。

由于可以强制显示页面的其余部分,如果有人只是选择忽略该文件的标头响应,则退出只是确保它之后没有其他内容,否则 .php 仍会处理页面的其余部分,并输出之后的任何内容。

出口; 是 die() 的别名,它终止脚本的执行。

于 2012-07-05T08:07:21.997 回答
0

终止脚本的执行。即使调用了 exit ,也将始终执行关闭函数对象析构函数。exit 是一种语言结构,如果没有传递任何状态,则可以不带括号调用它。

$filename = '/path/to/data-file';
$file = fopen($filename, 'r')
    or exit("unable to open file ($filename)");

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

于 2012-07-05T08:17:39.137 回答