實現思路:
將傳入的長鏈結存入資料庫中,並記錄建立時間,返回自增id。
將返回的id進行10進製轉64進製編碼:如自增id為10時,64進製轉換為a;即使當我們記錄到1億條時,1億的64進製為:f9eea,才5個字元長度,非常適合作為短鏈結的引數。
然後組合成 http://網域名稱/編碼引數/。我們既得到了短鏈結。當我們訪問短鏈結時,解析引數轉為10進製。到資料庫中查詢獲得相應的鏈結,進行301跳轉。此功能既為完成。
步驟如下:
1、修改host檔案->配置**虛擬目錄->進行url重寫
1.1 修改hosts檔案,將測試網域名稱指向本機ip
c:\windows\system32\drivers\etc\hosts
127.0.0.1 d.cn
1.2 配置apache,新增虛擬網域名稱對映,參考:
documentroot "d:/webroot/test/link"
servername d.cn
directoryindex index.html index.php
allowoverride all
order deny,allow
allow from all
documentroot "d:/webroot"
servername localhost
directoryindex index.html index.php
allowoverride all
order deny,allow
allow from all
1.3 配置.htaccess檔案,將短連線重定向,設定如下:
rewriteengine on
rewriterule ^(\s)$ index.php?code=$1 [l]
url短鏈結的實現原理和方法
2、增加64進製編碼與解碼方法:
func.php
<?php
function b64dec($b64) ];
if ($b === null)
$j = $len - $i - 1;
$dec += ($j == 0 ? $b : (2 << (6 * $j - 1)) * $b);
}return $dec;
}function decb64($dec)
$map = array(
0=>'0',1=>'1',2=>'2',3=>'3',4=>'4',5=>'5',6=>'6',7=>'7',8=>'8',9=>'9',
10=>'a',11=>'b',12=>'c',13=>'d',14=>'e',15=>'f',16=>'g',17=>'h',18=>'i',19=>'j',
20=>'k',21=>'l',22=>'m',23=>'n',24=>'o',25=>'p',26=>'q',27=>'r',28=>'s',29=>'t',
30=>'u',31=>'v',32=>'w',33=>'x',34=>'y',35=>'z',36=>'a',37=>'b',38=>'c',39=>'d',
40=>'e',41=>'f',42=>'g',43=>'h',44=>'i',45=>'j',46=>'k',47=>'l',48=>'m',49=>'n',
50=>'o',51=>'p',52=>'q',53=>'r',54=>'s',55=>'t',56=>'u',57=>'v',58=>'w',59=>'x',
60=>'y',61=>'z',62=>'_',63=>'=',
);$b64 = '';
do while ($dec >= 1);
return $b64;
}
3、建立資料表links
create table `links` (
`id` int(11) unsigned not null auto_increment,
`url` varchar(255) default null,
`ctime` int(11) default null,
primary key (`id`)
) engine=myisam auto_increment=26262628 default charset=latin1;
-- ----------------------------
-- records of links
-- ----------------------------
insert into `links` values ('10900', '', '1489568387');
insert into `links` values ('10901', '', '1489569782');
4、建立短鏈結生成與長鏈結獲取功能
index.php
<?php
include 'func.php';
define("host","localhost");
define("db_name","test");
define("user","root");
define("pass","123456");
function make_short_url($url)else}
function get_long_url($code)else
}//引數的接收與短鏈結返回部分
if($_get['code'])
}elseif($_get['url'])
5、測試
返回內容為:在瀏覽器中訪問即會跳轉到
乙個短鏈結已經基本實現,仍然有一些可待優化的地方。如跳轉方式改為301跳轉;資料庫資料量大時,可以採取分庫操作。或者用memcache或者redis快取伺服器來代替mysql,提公升效率等等
php mysql 短鏈結 PHP生成短鏈結案例
首先我們建立的檔案有三個,api檔案 生成短連線呼叫 index檔案 訪問短連線時跳轉使用 config檔案 連線資料庫用的 呼叫方法 網域名稱 api.php?url nginx規則 location elseelseelseelse echo json encode array code 201...
設計短鏈結系統
短鏈結轉換是將任意乙個長的 url 如 轉為乙個固定長度的url,如itlym.cn sd5d1r,並可以通過訪問短 url 來跳轉到長url上。呼叫簡訊服務傳送簡訊時,會有字數限制或因字數長短收取不同費用。如何設計乙個可靠的短鏈結系統 由於url字元限制,推薦為大小寫字母加數字,共62種字元。一般...
短鏈結實現方法
短鏈結只有十幾位,有時候卻可以代替幾十位上百位字母的url進行使用,之前一直沒注意,今天想起來研究一下。略微搜尋資料,發現短鏈結並不是包含了原來幾十位上百位的url的全部資訊,而是短鏈指向乙個跟你原鏈結可能完全不同的ip,短鏈中攜帶的引數經這個ip的服務解析後,或是還原,或者根據key找value,...