поставить выход (); после каждого местоположения заголовка PHP или сразу после последнего оператора if?

Как и в названии, интересно, если мне нужно поставить exit(); после каждого оператора PHP 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();
}
}

ОБНОВИТЬ

Я изменил его, чтобы иметь выход () после каждого вызова местоположения заголовка, и все по-прежнему работает нормально. Это в моем основном файле шаблона, так что да, есть код ниже, который нуждается в выполнении, если ничто не совпадает в расположении заголовка блока.

У меня сейчас так

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();
}
}

ОБНОВЛЕНИЕ 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 заявления. Пришлось добавить больше условий к if заявления в каждом elseif блок кода.

Конечный код выглядит так

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();
}
}

0

Решение

Если ваша цель — всегда выполнять перенаправление в этом блоке, поместите оператор выхода после последнего блока 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;
}
}
2

Другие решения

В вашем случае после каждого header() Звоните: у вас есть 4 различных условия и ни один или более могут не совпадать так что вы могли бы выполнять несколько header() звонки или вообще ничего, когда вы прошли свой последний if заявление, в результате чего ваша страница для выхода без какого-либо перенаправления на всех.

Если бы это был блок из одного if заявление с 1 или более elseif заявления, которые закончились else, все содержащие перенаправления, вы можете поставить его в конце:

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

Но это будет единственный сценарий, так как вам понадобится какая-то обработка ошибок, если ни один из if операторы в вашем текущем коде не совпадают.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector