網(wǎng)址縮短的PHP程序代碼

2010-12-03 09:53:17來源:作者:

近來微博很火,因?yàn)樽謹(jǐn)?shù)的限制,出現(xiàn)了很多網(wǎng)址縮短這種服務(wù),比如sina自己用了自家的sinaurl.cn、騰訊微博的url.cn,想到自己曾經(jīng)也注冊了一個很短的域名k6.hk很久了,一直閑著,不知道干嘛用,突然想到可以用來做

近來微博很火,因?yàn)樽謹(jǐn)?shù)的限制,出現(xiàn)了很多網(wǎng)址縮短這種服務(wù),比如sina自己用了自家的sinaurl.cn、騰訊微博的url.cn,想到自己曾經(jīng)也注冊了一個很短的域名k6.hk很久了,一直閑著,不知道干嘛用,突然想到可以用來做網(wǎng)址縮短,還不錯。說干就干,一會就寫好了。比如我的博客地址就可以縮短成:http://k6.hk/u

程序的設(shè)計很簡單,下面說下原理,

數(shù)據(jù)庫只有兩個字段seq(自增長數(shù)字)和url(數(shù)字的url地址,建立索引)。

用戶輸入一個url地址,查詢表是否包含此url,如果存在,則返回seq的數(shù)字,

如果不存在,則插入數(shù)據(jù)庫,得到一個新增加的自增seq數(shù)字,為了縮短數(shù)字占用的字符數(shù),我們可以把a(bǔ)bc等字母的大小寫用上。這樣10個數(shù)字,26個小寫字母,26個大小字母就組成了一個62進(jìn)制了。比如數(shù)字10000000000(100億)轉(zhuǎn)換后就是aUKYOA,只有6位了,這樣就能縮短很多的網(wǎng)址了。

下面是php的進(jìn)制轉(zhuǎn)換代碼,來源于php手冊(簡單吧),當(dāng)然其他語言實(shí)現(xiàn)也是很簡單的!

<?php
//十進(jìn)制轉(zhuǎn)到其他制
function dec2any($num, $base=62, $index=false)
{
  if (!$base)
  {
    $base = strlen($index);
  }
  elseif(!$index)
  {
    $index = substr("0123456789abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ", 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 );
  }
  elseif(!$index)
  {
    $index = substr("0123456789abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ", 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;
}
?>

得到縮短的網(wǎng)址以后,怎樣實(shí)現(xiàn)網(wǎng)址的轉(zhuǎn)發(fā)呢?可以利用 ttserver,將縮短網(wǎng)縮字串當(dāng)作key,真實(shí)的 url 地址當(dāng)作 value,存入ttserver中。ttserver本身就提供 http 訪問,只需要稍加修改就可以直接利用 ttserver 進(jìn)行縮短網(wǎng)址的轉(zhuǎn)發(fā):通過ttserver的http接口直接跳轉(zhuǎn),那么性能將會非常高,一臺機(jī)器一天提供上10億次的中專都不是問題。用兩臺機(jī)器就可以實(shí)現(xiàn)高可用了,這種服務(wù)都不怎么耗費(fèi)流量的。
 

關(guān)鍵詞:php網(wǎng)址縮短

贊助商鏈接: