Проверяйте части URL-адресов с помощью PHP

Я пытаюсь проверить массив URL-адресов с помощью PHP, но перед одним из URL-адресов будет несколько случайных строк (сгенерированный поддомен).

Вот что у меня есть на данный момент:

<?php
$urls = array(
    '127.0.0.1',
    'develop.domain.com'
);
?>

<?php if (in_array($_SERVER['SERVER_NAME'], $urls)) : ?>
//do the thing
<?php endif; ?>

Единственное, что перед develop.domain.com что-то будет. Например namething.develop.domain.com. Есть ли способ проверить наличие подстановочного знака в array URL-адресов, чтобы он мог проверять наличие 127.0.0.1 и совпадения с develop.domain.com?

array_search может быть .. смешанный с strpos?
treyBake 30.05.2018 14:50

Используйте parse_url(), чтобы разделить URL-адрес на соответствующие части, а затем проверить те, которые вам нужно проверить. В ваших массивах есть не URL-адреса, а имена хостов.

Patrick Mevzek 30.05.2018 16:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
73
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Предполагая, что этот URL-адрес будет использовать одно слово в субдомене, как вы упомянули в своем вопросе.

Если URL-адрес состоит из более чем одного слова, следующий код необходимо изменить в соответствии с ожидаемым словом в поддомене.

<?php
// Supported URLs array
$urls = array(
    '127.0.0.1',
    'develop.domain.com'
);

// Server name
//$_server_name = $_SERVER['SERVER_NAME'];
$_server_name = 'namething.develop.domain.com';

// Check if current server name contains more than 2 "." which means it has sub-subdomain
if (substr_count($_server_name, '.') > 2) {
    // Fetch sub-string from current server name starting after first "." position till end and update it to current server name variable
    $_server_name = substr($_server_name, strpos($_server_name, '.')+1, strlen($_server_name));
}

// Check if updated/filterd server name exists in our allowed URLs array
if (in_array($_server_name, $urls)){
    // do something
    echo $_server_name;
}

?>

Выход:

PASS domain.develop.domain.com
PASS namething.develop.domain.com

FAIL subsubdomain.domain.develop.domain.com
FAIL namething1.namething2.develop.domain.com

Не забудьте добавить несколько комментариев к коду, чтобы объяснить, что он делает / почему?

Can O' Spam 30.05.2018 15:06

Комментарии добавлены в код. Спасибо, что подчеркнули это. :)

d.coder 30.05.2018 15:19
Ответ принят как подходящий

Самый простой способ - пойти на все regex вот так

// Array of allowed url patterns
$urls = array(
  '/^127.0.0.1$/',
  '/^(([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])\.)*(develop.domain.com)$/i'
);
// For each of the url patterns in $urls,
// try to match the $_SERVER['SERVER_NAME']
// against
foreach ($urls as $url) {
  if (preg_match($url, $_SERVER['SERVER_NAME'])) {
    // Match found. Do something
    // Break from loop since $_SERVER['SERVER_NAME']
    // a pattern
    break;
  }
} 

Не забудьте добавить комментарии о том, что это делает и почему? А что соответствует регулярному выражению?

Can O' Spam 30.05.2018 15:20

Другие вопросы по теме