Я пытаюсь проверить массив 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?
Используйте parse_url(), чтобы разделить URL-адрес на соответствующие части, а затем проверить те, которые вам нужно проверить. В ваших массивах есть не URL-адреса, а имена хостов.






Предполагая, что этот 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
Не забудьте добавить несколько комментариев к коду, чтобы объяснить, что он делает / почему?
Комментарии добавлены в код. Спасибо, что подчеркнули это. :)
Самый простой способ - пойти на все 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;
}
}
Не забудьте добавить комментарии о том, что это делает и почему? А что соответствует регулярному выражению?
array_searchможет быть .. смешанный сstrpos?