2012-01-17 4 views
0

Я думал, что это выяснилось, но я столкнулся с проблемой. Я создаю черный список URL в своем приложении. Мне нужно заблокировать все поддомены, каталоги и т. Д. Из массива доменов. Ниже массив У ​​меня есть:Черный список и preg_match

$blacklist = array(
'/\.google\./', 
'/\.microsoft\./', 
); 

Вот где я проверяю:

$host = parse_url($url, PHP_URL_HOST); 
    $blackList = $GLOBALS['blacklist']; 
    foreach($blackList as $stop) { 
     if (preg_match($host === $stop)) { 
      die('blacklisted'); 
      } 
     } 

Когда я запускаю это, он не умирает, как предполагалось.

+0

** Может быть подходящее время для использования '$ GLOBALS', но я еще не встречал его **. Подробнее см. [Являются ли глобальные переменные в PHP плохой практикой? Если да, то почему?] (Http://stackoverflow.com/questions/1557787/are-global-variables-in-php-considered-bad-practice-if-so-why) – rdlowrey

ответ

2

Ваш цикл Еогеасп должен быть таким:

foreach($blacklist as $stop) { 
     if (preg_match($stop, $host)) { 
      die("blacklisted\n"); 
     } 
} 

У вас было 2 проблемы:

  1. массив переменных был назван blacklist, но вы использовали blackList в foreach цикле.
  2. preg_match был использован неправильно, ему требуется, по крайней мере, 2 аргумента, как в моем ответе.
+0

Я просто изменил его, и он все еще делает не работа. –

+0

Посмотрите, как это работает: http://ideone.com/fdmTo и распечатайте переменную '$ url', используя' var_dump ($ url); 'для исследования. – anubhava

+0

Спасибо за помощь! Все, что вы разместили, выглядит хорошо. Я сделал 'print_r ($ blackList)', и он возвратил пустой массив. Наверное, это моя проблема. –

0

Вы используете preg_match неправильно!

$host = parse_url($url, PHP_URL_HOST); 

foreach ($blacklist as $pattern){ 
    $matches = array(); 
    preg_match($pattern, $host, $matches); 
    if (count($matches)) die('blacklisted'); 
}