php微博客应用中的url缩短类
在Unix机上的PHP脚本 .class.php可以复用 下面有4个方法用来缩短 加密 解密 DB中的原始URL 并缩短他
结合Apache的rewrite模块进行路由
如传入一个http://index.php/catagory/python-cookbook_3tdedition.php
重写为..index.php/123/512.html
在Apache模块中可以定义 catagory请求为123路由地址
因为是用的单例模式的CONN 处理并发请求 测试的时候MySQL 并发命中会很低
#!usr/local/bin/php
characterMap = array(
'1','2','3','4','5','6','7','8','9',
'z','x','c','b','v',
'f','g','h','j','k','L','m','n',
'q','w','r','t','y','p','s','d'
);
$this->base = sizeof($this->characterMap);
}
public static function getInstance(){
static $instance = null;
if($instance === null){
$instance = new UrlShortener();
}
return $instance;
}
public function shorten($conn,$url){
$escapedUrl = mysql_escape_string($url);
$res = mysql_query("select 'id' from urls where 'url' like $escapedUrl",$conn);
$row = mysql_fetch_row($res);
mysql_free_result($res);
//如果有 就进行编码 然后重写进入数据库
if($row)
return $this->encode($row[0]+self::OFFSET);
//如果没有 就先编码后插入
$res = mysql_query("
insert into 'urls'('url') values('$escapedUrl')
",$conn);
return $this->encode(mysql_insert_id($conn)+self::OFFSET);
}
public function encode($val){
#递归对每一个URL中的字符进行解码
#@return 解码以后的字符串Url
$val += 512;
if($val < $this->base){
return $this->characterMap[ $val ];
}else{
return $this->encode(floor( $val/$this->base)).
$this->characterMap[ $val % $this->base];
}
}
public function decode($val){
$decodeMap = array_flip($this->characterMap);#翻转字典
$parts = array_reverse(str_split( $val ));
$index = 0;
$i = 0;
foreach($parts as $part){
$index += $decodeMap[$part] * pow($this->base,$i++);
}
return $index-512;
}
public function expand($conn,$index){
$id = $this->decode($index)-self::OFFSET;
$res = mysql_query('
select "url" from "urls" where 'id' = $id
',$conn);
$value = (($row = mysql_fetch_row( $res)))?$row[0]:null;
mysql_free_result($res);
return $value;
}
}#end class
?>2. [文件] test4Url.php
#!/usr/local/bin/php
expand(getDb(),$index).'\n';
}
function getDb(){
static $db = null;
if(!$db||!mysql_ping($db){
$db = mysql_connect('localhost','user','password');
mysql_select_db("test");
}
return $db;
}
?> 以上就是PHP微博客应用中的URL缩短类 的内容,更多相关内容请关注PHP中文网(www.php.cn)!











