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


Convert link to anchor only if domain exists

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

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秒。(它们过去常常立即加载)。有没有更好的方法我可以用?

您可以缓存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;
    }   
}

当然,如果您愿意的话,您可以在类中处理这个问题,并优化其他值元素。这是一个概念验证代码。