0

我的网站中有一个链接检测,它将用户输入的链接转换为锚点,但我想限制不存在的垃圾链接的转换,我已经构建了以下内容

public function tLink($s){
    $domain = preg_replace('/(http|ftp)+(s)?:(\/\/)((\w|\.)+)(\/)?(\S+)?/i', '\4', $s);
    getmxrr($domain,$result);
    if(!empty($result)){
        return preg_replace('/(http|ftp)+(s)?:(\/\/)((\w|\.)+)(\/)?(\S+)?/i', '<a href="\0" title="\0">\4</a>', $s);
    }
    return $s;
}

但这使我的页面加载速度非常慢,需要 2 到 5 秒才能加载。(他们曾经立即加载)。我可以使用更好的方法吗?

4

1 回答 1

1

您可以缓存 的输出,getmxrr以确保您不会对已验证的域执行相同的操作。

假设您已经配置并安装了 memcache。你可以用这个函数替换你的查找

function domain_found($domain) { 
$memcache_obj = new Memcache;
$memcache_obj->connect('localhost', 11211);
$var = $memcache_obj->get($domain);
if ($var == "found") return true;
if ($var == "notfound") return false;

    getmxrr($domain,$result); 
    if (empty($result)) {
      $memcache_obj->put($domain, 'notfound');
      return false;
    } else {
      $memcache_obj->put($domain, 'found');
      return true;
    }   
}

如果您愿意,您当然可以在一个类中工作,并优化其他价值元素。这用作概念验证代码。

于 2013-07-05T10:28:43.130 回答