01 2013年03月

php+mysql轻松实现微博短网址功能

发布于:08时26分 | 来源:湛蓝天空  |   编辑:湛蓝  |   日志分类:PHP  |   已聚集:人围观

微博短网址功能
微博中的短网址跳转功能

实现思路如下:

一、创建表结构
 
CREATE TABLE  `skyhome`.`skyhome_url` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT ,
`url` VARCHAR( 500 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`click` INT( 10 ) NOT NULL DEFAULT  '0',
PRIMARY KEY (  `id` )
) ENGINE = INNODB
 
在数据库skyhome中创建skyhome_url表包含id、url、click三个字段用来存储url信息。
 
二、转换并保存短网址
 
//十进制转到其他制  
function dec2any( $num, $base=62, $index=false ) {  
    if (! $base ) {  
        $base = strlen( $index );  
    } else if (! $index ) {  
        $index = substr( "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ,0 ,$base );  
    }  
    $out = "";  
    for ( $t = floor( log10( $num ) / log10( $base ) ); $t >= 0; $t-- ) {  
        $a = floor( $num / pow( $base, $t ) );  
        $out = $out . substr( $index, $a, 1 );  
        $num = $num - ( $a * pow( $base, $t ) );  
    }  
    return $out;  
}  
function any2dec( $num, $base=62, $index=false ) {  
    if (! $base ) {  
        $base = strlen( $index );  
    } else if (! $index ) {  
        $index = substr( "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, $base );  
    }  
    $out = 0;  
    $len = strlen( $num ) - 1;  
    for ( $t = 0; $t <= $len; $t++ ) {  
        $out = $out + strpos( $index, substr( $num, $t, 1 ) ) * pow( $base, $len - $t );  
    }  
    return $out;  
}  
 
$messages="电视里正在直播李安获得奥斯卡最佳导演奖的致谢词, 当看到李安说“我爱你,我的儿子,同时谢谢我的律师们”这句时,病床上的李双江热泪盈眶。!原文:http://www.skyhome.cn/diaozi/267.html ";  
$pattern ="/http:////?[/w:///./?=&-_]+/is";  
preg_match($pattern, $messages, $url);  
$url=$url[0];  
if($url){  
 $urldatabase=addslashes($url);  
 $query=$GLOBALS['db']->query("insert into `skyhome_url` (url) values ('$urldatabase')");  
 $id=$GLOBALS['db']->insert_id();  
 $shorturl="http://www.skyhome.cn/".dec2any($id);  
 $messages=str_replace($url,$shorturl,$messages);  
}  
//echo($messages); 
 
三、htaccess跳转设置
 
apache中设置:
 
 RewriteEngine on 
 RewriteBase / 
 RewriteRule ^([a-z0-9/-]+)$ index.php?co=$1 [L]
 
nginx中设置:
 
 rewrite ^/([a-z0-9/-]+)$ /index.php?co=$1 last;
 
 四、在php脚本中进行301跳转处理
 
 if($_GET["u"]){  
  $id=any2dec($_GET["u"]);  
  mysql_connect("localhost", "root", "") or  
   die("Could not connect: " . mysql_error());  
  mysql_select_db("skyhome");  
  $result = mysql_query("SELECT url FROM `skyhome_url` where id=$id limit 0,1");  
  $row = mysql_fetch_array($result, MYSQL_NUM);  
  $url=$row[0];  
  if($url) mysql_query("update `skyhome_url` set click=click+1 where id=$id");  
  header('Location: '.$url.'', TRUE, 301);  
}else{  
 //没有接收数据  

除非注明,均为湛蓝天空原创,转载请注明本文网址:http://skyhome.cn/php/275.html

标签:
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
  • 湛蓝
    2013-03-01 08:38:16发表

    努力让读者每天打开第一眼有新内容可读。

  • 湛蓝
    2013-03-01 08:37:26发表

    让用户每天打开第一眼有新内容可读。

  • 小鬼哥
    2013-03-01 08:09:50发表

    哇!自动发布?3月1日早上8点26分还没到呢