关于短域名的那点事。。
浏览:1669次 出处信息
这里我使用的是Tokyo Tyrant,不了解这个玩意儿的,可以自行google,你可以把它当成memcached来使用就行了。
以下是我的代码。注意,这里我没有考虑Tokyo Tyrant宕机的问题,各位可以自行研究怎么来做。
<?php
/**
* 短域名生成&解析类
* @author 废墟 <r.anerg@gmail.com>
* @version 1.0 2011-5-12
*/
class Sort_URL {
private $mem;
private $base_url = 'http://anerg.com/';
public function __construct() {
$mem_conf = array(
array(
'host' => '192.168.10.90',
'port' => '11116'
),
array(
'host' => '192.168.10.90',
'port' => '11117'
),
);
$this->mem = new Memcache();
foreach ($mem_conf as $v) {
$this->mem->addServer($v['host'], $v['port']);
}
}
public function encode($url) {
$url = trim($url);
if(!preg_match("#^[http://|https://|ftp://]#iS", $url)) {
return false;
}
$md5 = md5($url);
$aid = $this->mem->get($md5);
if(!$aid) {
if(($aid = $this->mem->increment('auto_increment_id')) === false) {
$this->mem->set('auto_increment_id', 10000);
$aid = $this->mem->increment('auto_increment_id');
}
$this->mem->set($md5, $aid);
$key = $this->dec2any($aid);
$this->mem->set($key, $url);
} else {
$key = $this->dec2any($aid);
}
return $this->base_url.$key;
}
public function decode($url) {
$key = str_replace($this->base_url, '', trim($url));
return $this->mem->get($key);
}
private function dec2any($num, $base=62, $index=false) {
$out = '';
if (! $base ) {
$base = strlen($index);
} else if (! $index ) {
$index = substr("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ,0 ,$base);
}
$t = ($num == 0) ? 0 : floor(log10($num) / log10($base));
for ($t; $t >= 0; $t--) {
$a = floor($num / pow( $base, $t ));
$out = $out . substr($index, $a, 1);
$num = $num - ($a * pow( $base, $t ));
}
return $out;
}
}
$app = new Sort_URL();
$url = array(
'http://www.iciba.com',
'http://www.hp009.com',
'http://edu.hp009.com',
'http://doc.hp009.com',
'http://news.edu.hp009.com/2011/0512/1532639.shtml'
);
foreach ($url as $v) {
$sort = $app->encode($v);
echo "sort link: ".$sort."\n";
$original = $app->decode($sort);
echo "original: ".$original."\n";
}
?>
上面的代码将输出
sort link: http://anerg.com/2Bj
original: http://www.iciba.com
sort link: http://anerg.com/2Bk
original: http://www.hp009.com
sort link: http://anerg.com/2Bl
original: http://edu.hp009.com
sort link: http://anerg.com/2Bm
original: http://doc.hp009.com
sort link: http://anerg.com/2Bo
original: http://news.edu.hp009.com/2011/0512/1532639.shtml
original: http://www.iciba.com
sort link: http://anerg.com/2Bk
original: http://www.hp009.com
sort link: http://anerg.com/2Bl
original: http://edu.hp009.com
sort link: http://anerg.com/2Bm
original: http://doc.hp009.com
sort link: http://anerg.com/2Bo
original: http://news.edu.hp009.com/2011/0512/1532639.shtml
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:fqueue初步分析
文章信息
- 作者:废墟 <a@anerg.cn> 来源: 废墟
- 标签: 短域名
- 发布时间:2011-09-19 23:44:20
近3天十大热文
- [66] Oracle MTS模式下 进程地址与会话信
- [66] Go Reflect 性能
- [65] 如何拿下简短的域名
- [59] android 开发入门
- [59] 图书馆的世界纪录
- [59] IOS安全–浅谈关于IOS加固的几种方法
- [58] 【社会化设计】自我(self)部分――欢迎区
- [53] 视觉调整-设计师 vs. 逻辑
- [47] 界面设计速成
- [46] 读书笔记-壹百度:百度十年千倍的29条法则