Объединение нескольких strpos () в оператор if () - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь сделать так, чтобы добавленный пользовательский агент оставался на странице. Если пользовательский агент не обнаружен, выполняется перенаправление.

Этот код работает

$useragent = $_SERVER['HTTP_USER_AGENT'];

if (strpos($useragent, "useragent") === false) {
  header("Location: http://google.com/");
}

Итак, я попытался добавить несколько таких пользовательских агентов, но не сработало.

$useragent = $_SERVER['HTTP_USER_AGENT'];

if (
    strpos($useragent, "agent1") === false ||
    strpos($useragent, "agent2") === false ||
    strpos($useragent, "agent2") === false
) {
      header("Location: http://google.com/");
}

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Возможно, вам понадобится код, который проще обновить, чем ваш следующий strpos(). Кроме того, вы должны искать без учета регистра. И запуск механизма PCRE при каждом доступе к странице может быть неоптимальным.

Поэтому я бы придерживался подхода stripos() следующим образом:

<?php
$partial_allowed_UA_names = ['mozilla', 'chrome', 'safari']; # <----- Config here.
$go_away = true;
foreach ($partial_allowed_UA_names as $v) {
    if (stripos($_SERVER['HTTP_USER_AGENT'], $v) !== false) {
        $go_away = false;
        break;
    }
}
if ($go_away) header('Location: https://www.google.com/');
?>

С уважением,

0 голосов
/ 09 мая 2020

Вместо этого можно использовать preg_match().

$useragent = $_SERVER['HTTP_USER_AGENT'];
$agents = ['agent1', 'agent2', 'agent3']; //array of predefined names of agents

if (!preg_match('/' . implode('|', $agents) . '/i', $useragent)) { //check if current user agent is not enlisted
    header("Location: http://google.com/");
}
...