我要把出口关上吗;在每个PHP头位置之后还是在最后一个if语句之后?

我要把出口关上吗;在每个PHP头位置之后还是在最后一个if语句之后?,php,exit,http-redirect,Php,Exit,Http Redirect,正如标题所说,我想知道是否需要将exit()在每个PHP if语句之后,还是仅在主if语句之后,还是仅在最后一个if语句之后?目前我在最后一个if语句中使用了它,它运行良好 if ( isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ) { if ( strpos($_SERVER['QUERY_STRING'], 'occupation') === false || $_SERVER

正如标题所说,我想知道是否需要将
exit()
在每个PHP if语句之后,还是仅在主if语句之后,还是仅在最后一个if语句之后?目前我在最后一个if语句中使用了它,它运行良好

if ( isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ) {

    if ( strpos($_SERVER['QUERY_STRING'], 'occupation') === false || $_SERVER['REQUEST_URI'] != strtolower($_SERVER['REQUEST_URI']) || $occupation == '' ) {
        header ('Location: http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position), true, 301);
    }

    if ( $arr_position == '' ) {
        header ('Location: http://' . $domain . '/jobs/', true, 301);
    }

    if ( isset($home) && $arr_position == '' ) {
        header ('Location: http://' . $domain, true, 301);
    }

    if ( isset($home) && $arr_position != '' ) {
        header ('Location: http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position), true, 301);

        exit();
    }
}
更新

我将其更改为在每次头位置调用后都有一个exit(),并且所有操作仍然正常。这是在我的主模板文件中,因此,如果标题位置if块中没有匹配项,则需要执行下面的代码

我现在是这样的

if ( isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ) {

    if ( strpos($_SERVER['QUERY_STRING'], 'occupation') === false || $_SERVER['REQUEST_URI'] != strtolower($_SERVER['REQUEST_URI']) || $occupation != strtolower($arr_occupation) ) {
        header ('Location: http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position), true, 301);
        exit();
    }

    if ( $arr_position == '' ) {
        header ('Location: http://' . $domain . '/jobs/', true, 301);
        exit();
    }

    if ( isset($home) && $arr_position == '' ) {
        header ('Location: http://' . $domain, true, 301);
        exit();
    }

    if ( isset($home) && $position == urlencode($arr_position) ) {
        header ('Location: http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position), true, 301);
        exit();
    }
}
if ( isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ) {
    $new_url = false;

    if ( !isset($occupation) || $occupation != strtolower($arr_occupation) || $_SERVER['REQUEST_URI'] != strtolower($_SERVER['REQUEST_URI']) ) {
        $new_url = 'http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position);

    } elseif ( isset($home) ) {
        if ( !isset($position) || $position != $arr_position || $position == '' ) {
            $new_url = 'http://' . $domain;
        } else {
            $new_url = 'http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
        }

    } elseif ( $currentPage == 'Jobs' ) {
        if ( !isset($position) || $position == '' ) {
            $new_url = 'http://' . $domain . '/jobs/';
        } elseif (isset($position) && $position != '' && $position != $arr_position) {
            $new_url = 'http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
        }
    }

    if ($new_url !== false) {
        header('Location: ' . $new_url, true, 301);
        exit();
    }
}
更新2

我继续使用DefiniteIntegral,因为我喜欢这个逻辑,但我必须在主块中使用单独的if语句。使用
elseif
不起作用。我已经对它进行了全面测试,并在每个
elseif
中使用了不同的条件,但它无法正常工作。因此,我可以在主块中使用单独的if语句

这是它现在的样子

if ( isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ) {
    $new_url = false;

    if ( strpos($_SERVER['QUERY_STRING'], 'occupation') === false || $_SERVER['REQUEST_URI'] != strtolower($_SERVER['REQUEST_URI']) || $occupation != strtolower($arr_occupation) ) {
        $new_url = 'http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
    } 

    if ( $arr_position == '' ) {
        $new_url = 'http://' . $domain . '/jobs/';
    }

    if ( isset($home) && $arr_position == '' ) {
        $new_url = 'http://' . $domain;
    }

    if ( isset($home) && $arr_position != '' ) {
        $new_url = 'http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
    }

    if ($new_url !== false) {
        header('Location: ' . $new_url, true, 301);
        exit();
    }
}
最终更新

最后,使用
elseif
语句使其正常工作。必须在每个
elseif
代码块的
if
语句中添加更多条件

最终代码如下所示

if ( isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ) {

    if ( strpos($_SERVER['QUERY_STRING'], 'occupation') === false || $_SERVER['REQUEST_URI'] != strtolower($_SERVER['REQUEST_URI']) || $occupation != strtolower($arr_occupation) ) {
        header ('Location: http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position), true, 301);
        exit();
    }

    if ( $arr_position == '' ) {
        header ('Location: http://' . $domain . '/jobs/', true, 301);
        exit();
    }

    if ( isset($home) && $arr_position == '' ) {
        header ('Location: http://' . $domain, true, 301);
        exit();
    }

    if ( isset($home) && $position == urlencode($arr_position) ) {
        header ('Location: http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position), true, 301);
        exit();
    }
}
if ( isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ) {
    $new_url = false;

    if ( !isset($occupation) || $occupation != strtolower($arr_occupation) || $_SERVER['REQUEST_URI'] != strtolower($_SERVER['REQUEST_URI']) ) {
        $new_url = 'http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position);

    } elseif ( isset($home) ) {
        if ( !isset($position) || $position != $arr_position || $position == '' ) {
            $new_url = 'http://' . $domain;
        } else {
            $new_url = 'http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
        }

    } elseif ( $currentPage == 'Jobs' ) {
        if ( !isset($position) || $position == '' ) {
            $new_url = 'http://' . $domain . '/jobs/';
        } elseif (isset($position) && $position != '' && $position != $arr_position) {
            $new_url = 'http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
        }
    }

    if ($new_url !== false) {
        header('Location: ' . $new_url, true, 301);
        exit();
    }
}

如果您的目标是始终在此块中执行重定向,请将exit语句放在最后一个If块之后,放在大括号之外。如果在您向我们展示的块下面有代码,那么如果目标是重定向,它仍然会执行不必要的代码

if ( isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ) {
    $new_url = false;

    if ( strpos($_SERVER['QUERY_STRING'], 'occupation') === false || $_SERVER['REQUEST_URI']    != strtolower($_SERVER['REQUEST_URI']) || $occupation == '' ) {
        $new_url = 'http://' . $domain . strtolower ( '/ jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
    } elseif ( isset($home) ) {
        if ( $arr_position == '' ) {
            $new_url = 'http://' . $domain;
        } else {
            $new_url = 'http://' . $domain . strtolower ( '/ jobs/?occupation='.$arr_occupation.'&position='.$arr_position);    
        }
    } elseif ( $arr_position == '' ) {
        $new_url = 'http://' . $domain . '/jobs/';
    }

    if ($new_url !== false) {
        header('Location: ' . $new_url, true, 301);
        exit;
    }
}

如果您的目标是始终在此块中执行重定向,请将exit语句放在最后一个If块之后,放在大括号之外。如果在您向我们展示的块下面有代码,那么如果目标是重定向,它仍然会执行不必要的代码

if ( isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ) {
    $new_url = false;

    if ( strpos($_SERVER['QUERY_STRING'], 'occupation') === false || $_SERVER['REQUEST_URI']    != strtolower($_SERVER['REQUEST_URI']) || $occupation == '' ) {
        $new_url = 'http://' . $domain . strtolower ( '/ jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
    } elseif ( isset($home) ) {
        if ( $arr_position == '' ) {
            $new_url = 'http://' . $domain;
        } else {
            $new_url = 'http://' . $domain . strtolower ( '/ jobs/?occupation='.$arr_occupation.'&position='.$arr_position);    
        }
    } elseif ( $arr_position == '' ) {
        $new_url = 'http://' . $domain . '/jobs/';
    }

    if ($new_url !== false) {
        header('Location: ' . $new_url, true, 301);
        exit;
    }
}

如果您的目标是始终在此块中执行重定向,请将exit语句放在最后一个If块之后,放在大括号之外。如果在您向我们展示的块下面有代码,那么如果目标是重定向,它仍然会执行不必要的代码

if ( isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ) {
    $new_url = false;

    if ( strpos($_SERVER['QUERY_STRING'], 'occupation') === false || $_SERVER['REQUEST_URI']    != strtolower($_SERVER['REQUEST_URI']) || $occupation == '' ) {
        $new_url = 'http://' . $domain . strtolower ( '/ jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
    } elseif ( isset($home) ) {
        if ( $arr_position == '' ) {
            $new_url = 'http://' . $domain;
        } else {
            $new_url = 'http://' . $domain . strtolower ( '/ jobs/?occupation='.$arr_occupation.'&position='.$arr_position);    
        }
    } elseif ( $arr_position == '' ) {
        $new_url = 'http://' . $domain . '/jobs/';
    }

    if ($new_url !== false) {
        header('Location: ' . $new_url, true, 301);
        exit;
    }
}

如果您的目标是始终在此块中执行重定向,请将exit语句放在最后一个If块之后,放在大括号之外。如果在您向我们展示的块下面有代码,那么如果目标是重定向,它仍然会执行不必要的代码

if ( isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ) {
    $new_url = false;

    if ( strpos($_SERVER['QUERY_STRING'], 'occupation') === false || $_SERVER['REQUEST_URI']    != strtolower($_SERVER['REQUEST_URI']) || $occupation == '' ) {
        $new_url = 'http://' . $domain . strtolower ( '/ jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
    } elseif ( isset($home) ) {
        if ( $arr_position == '' ) {
            $new_url = 'http://' . $domain;
        } else {
            $new_url = 'http://' . $domain . strtolower ( '/ jobs/?occupation='.$arr_occupation.'&position='.$arr_position);    
        }
    } elseif ( $arr_position == '' ) {
        $new_url = 'http://' . $domain . '/jobs/';
    }

    if ($new_url !== false) {
        header('Location: ' . $new_url, true, 301);
        exit;
    }
}

在每次
header()
调用之后的情况下:您有4个不同的条件,可能没有或多个条件匹配,因此您可以执行多个
header()
调用,或者在传递最后一个
if
语句时根本没有调用,从而导致页面退出而不进行任何重定向

如果它是一个由一个
If
语句和一个或多个
elseif
语句组成的块,这些语句以
else
结尾,所有语句都包含重定向,则可以将其放在末尾:

if
  header();
elseif
  header();
elseif
  header();
else
  header();
exit;

但这将是唯一一种情况,因为如果当前代码中的
if
语句都不匹配,则需要进行某种错误处理。

在每次
header()调用之后,您都需要执行多个
header():您有4个不同的条件,并且没有一个或多个条件匹配,因此可以执行多个
header()
调用,或者在传递最后一条
if
语句时根本不调用,导致页面退出而不进行任何重定向

如果它是一个由一个
If
语句和一个或多个
elseif
语句组成的块,这些语句以
else
结尾,所有语句都包含重定向,则可以将其放在末尾:

if
  header();
elseif
  header();
elseif
  header();
else
  header();
exit;

但这将是唯一一种情况,因为如果当前代码中的
if
语句都不匹配,则需要进行某种错误处理。

在每次
header()调用之后,您都需要执行多个
header():您有4个不同的条件,并且没有一个或多个条件匹配,因此可以执行多个
header()
调用,或者在传递最后一条
if
语句时根本不调用,导致页面退出而不进行任何重定向

如果它是一个由一个
If
语句和一个或多个
elseif
语句组成的块,这些语句以
else
结尾,所有语句都包含重定向,则可以将其放在末尾:

if
  header();
elseif
  header();
elseif
  header();
else
  header();
exit;

但这将是唯一一种情况,因为如果当前代码中的
if
语句都不匹配,则需要进行某种错误处理。

在每次
header()调用之后,您都需要执行多个
header():您有4个不同的条件,并且没有一个或多个条件匹配,因此可以执行多个
header()
调用,或者在传递最后一条
if
语句时根本不调用,导致页面退出而不进行任何重定向

如果它是一个由一个
If
语句和一个或多个
elseif
语句组成的块,这些语句以
else
结尾,所有语句都包含重定向,则可以将其放在末尾:

if
  header();
elseif
  header();
elseif
  header();
else
  header();
exit;


但这将是唯一的情况,因为如果当前代码中的
if
语句都不匹配,您将需要某种错误处理。

我已经尝试过这样做,但当url中有查询字符串时,站点不起作用,因为这是主块中的第一个if条件。抱歉,不完全确定你想要完成什么。如果您仅在条件匹配时尝试执行重定向,请参见上面的编辑。好的,我喜欢您构建此块的方式。但是当我用
elseif
而不是主块中的每个单独的
if
编写它时,其中一个elseif不会被触发。这一个永远不会开火,总是在它上面的那个,即使是在家里
elseif(isset($home)和&$arr_position=='')
关于我前面的评论,你能告诉我这是为什么吗?好的,实际上,通读这些条件,你需要改变结构以与前面的代码相同。如果。。。将评估通过的第一个条件,因此如果逻辑正确,这是一个更好的设计。再次更新上面的内容。我像那样尝试过