我以为我弄明白了,但我遇到了一个问题。我正在我的应用程序中创建一个URL黑名单。我需要从一组域中阻止所有子域,目录等。下面是我的数组:
$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 :(得分:2)
你的foreach循环应该是这样的:
foreach($blacklist as $stop) {
if (preg_match($stop, $host)) {
die("blacklisted\n");
}
}
你有两个问题:
blacklist
,但您在blackList
循环中使用了foreach
。preg_match
使用不当,至少需要2个参数,如我的回答。答案 1 :(得分: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');
}
答案 2 :(得分:0)
没有foreach:
if(preg_match('/'.implode('|', array_map('preg_quote', $blacklist)).'/i', $string))
{
die("blacklisted");
}