php中的快速黑名单处理器?

时间:2014-07-04 13:57:32

标签: php arrays preg-replace

我有一个带搜索功能的网站,但我想查看列入黑名单的关键字的搜索字词

问题是列表太大了,现在网站加载速度很慢(3-5s第一个字节),CPU负载很高。 该列表中有45.000行(~1.5 mb)

我试图拆分几个较小的文件,但它仍然很慢

黑名单功能适用于每次搜索 你可以在下面看到

function CheckForBlockedWords(){

     $blackList=array();
 $string1 = trim(strtolower(str_replace("_"," ",$_GET['search'])));
 $string1 = preg_replace('/-+/', ' ',$string1);
 $string1 = preg_replace('/\s+/', ' ',$string1);
 $string1 = trim($string1);
  foreach (glob("/home/keywords2/*") as $file) {
        $blackList = file($file);

foreach($blackList as $word)
            {

                 $string2 = trim(strtolower(str_replace("_"," ",$word)));
                 $string2 = str_replace("-"," ",$string2);

                 //$string2 = preg_replace('/-+/', ' ',$string2);


                 $string2 = preg_replace('/\s+/', ' ',$string2);


                $string2 = trim($string2);

                if(strpos($string1, $string2) !== false   )
                {
                    echo "<div class='blockedSearch'>What you are searching is blocked!</div>";
                    return true;
                }
            }

 }

        return false;
}

以任何方式更快地完成这项工作?

1 个答案:

答案 0 :(得分:0)

文件系统很慢。数据库很快,因为它们具有索引并可以缓存查询。因此,如果用户键入的关键字列在那里,您最好设置一个小表并在该表中搜索。这比从磁盘读取文件和循环遍历它们要快得多。