成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

網址縮短的PHP程序代碼

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

近來微博很火,因為字數的限制,出現了很多網址縮短這種服務,比如sina自己用了自家的sinaurl.cn、騰訊微博的url.cn,想到自己曾經也注冊了一個很短的域名k6.hk很久了,一直閑著,不知道干嘛用,突然想到可以用來做

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

程序的設計很簡單,下面說下原理,

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

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

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

下面是php的進制轉換代碼,來源于php手冊(簡單吧),當然其他語言實現也是很簡單的!

<?php
//十進制轉到其他制
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;
}
?>

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

關鍵詞:php網址縮短

贊助商鏈接:

主站蜘蛛池模板: 拉孜县| 内江市| 新蔡县| 什邡市| 勃利县| 青河县| 涟水县| 河东区| 柳江县| 宕昌县| 孝感市| 广南县| 民权县| 息烽县| 靖边县| 巴东县| 灵山县| 海城市| 泗水县| 包头市| 来凤县| 通辽市| 太保市| 凉城县| 廉江市| 日喀则市| 北京市| 银川市| 临猗县| 枣强县| 安福县| 襄樊市| 隆德县| 周宁县| 柏乡县| 临泉县| 定陶县| 社会| 车致| 济南市| 昌邑市|