仅在域存在时才将链接转换为锚点

时间:2013-07-05 10:20:09

标签: php hyperlink verification

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

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秒才能加载。 (他们过去常常加载)。我可以使用更好的方法吗?

1 个答案:

答案 0 :(得分: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;
    }   
}

如果您愿意,您可以在课堂内使用它,并优化其他价值元素。这可以作为概念证明代码。