Проверьте, находится ли запущенный скрипт в массиве

#php #if-statement

#php #if-оператор

Вопрос:

Я пытаюсь запустить функцию, но только на определенных страницах. Я думал, что это будет нормально…

 $allowed_pages = array('/admin/update.php', '/admin/system.php', '/admin/install.php');
if($_SERVER['SCRIPT_NAME'] == $allowed_pages) {
    myCoolFuntion();
}
 

… но, похоже, он работает не так, как ожидалось, и myCoolFuntion() выполняется независимо от того, на какой странице я нахожусь.

Если я выполняю эхо $_SERVER['SCRIPT_NAME'] на любой заданной странице, я вижу, что оно соответствует правильно (например, соответствует странице, указанной в массиве, /admin/update.php как и ожидалось), и поэтому я знаю, что значения в массиве имеют правильный формат.

Что я делаю не так?

Ответ №1:

Основываясь на приведенном примере, я не вижу никакого способа, который myCoolFunction(); можно было бы выполнить.

$_SERVER['SCRIPT_NAME'] никогда не будет равно $allowed_pages , потому что первое — это a string , а второе — an array .

Вместо представленного кода используйте функцию, например, in_array для проверки того, что SCRIPT_NAME значение находится в массиве:

 $allowed_pages = array('/admin/update.php', '/admin/system.php', '/admin/install.php');
if (in_array($_SERVER['SCRIPT_NAME'], $allowed_pages)) {
    myCoolFunction();
} else {
    echo 'Not found in array';
}
 

in_array определяется таким образом:

Проверяет, существует ли значение в массиве

Более подробная информация об in_array этом в официальных документах.