PHP短域名互转的实例分享
添加时间:2013-7-7 点击量:
PHP实现短域名互转。
代码如下:
<?php
/
短域名生成&解析类
edit www.jbxue.com
/
class Build_URL {
private ¥mem;
private ¥base_url = http://xxx.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 Build_URL();
¥url = array(
http://www.baidu.com,
http://www.google.com,
http://www.jbxue.com
);
foreach (¥url as ¥v) {
¥sort = ¥app->encode(¥v);
echo sort link: .¥sort.\n;
¥original = ¥app->decode(¥sort);
echo original: .¥original.\n;
}
?>
我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》
PHP实现短域名互转。
代码如下:
<?php
/
短域名生成&解析类
edit www.jbxue.com
/
class Build_URL {
private ¥mem;
private ¥base_url = http://xxx.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 Build_URL();
¥url = array(
http://www.baidu.com,
http://www.google.com,
http://www.jbxue.com
);
foreach (¥url as ¥v) {
¥sort = ¥app->encode(¥v);
echo sort link: .¥sort.\n;
¥original = ¥app->decode(¥sort);
echo original: .¥original.\n;
}
?>