PHP實現產生短網址方法總結

來源:互聯網
上載者:User
本文給大家匯總介紹了3種使用php產生短網址的方法,第一種是PHP+MySQl實現短網址的產生和讀取,第二種是php+ini方式,第三種跟第一種有些類似,各有利弊,小夥伴們可以根據自己的項目需求來選擇。

正常的網址帶上參數的那種可能會很長,尤其是我們在印刷紙質品如企業宣傳冊中要印上某個長的url的話非常難看,而且也沒幾個人會去記這個網址,雖然現在可以用掃二維碼的方式開啟長網址。但是人們可以使用短網址來實現優美的連結,尤其是有字數限制的應用如微博。

短網址的實現原理就是有一個資料表會設定檔將短網址和實際網址進行對應,當請求某個短網址時,程式跳轉到對應的實際網址上去,從而實現網址的訪問。

方案1:PHP+MySQl實現短網址的產生和讀取

常規的方案我們將產生好的短網址和原網址對應到一張資料表中,然後供讀取使用。我們先來看如何產生唯一的短網址。

//產生短網址 function code62($x){   $show='';   while($x>0){     $s=$x % 62;     if ($s>35){       $s=chr($s+61);     }elseif($s>9&&$s<=35){       $s=chr($s+55);     }     $show.=$s;     $x=floor($x/62);   }   return $show; } function shorturl($url){   $url=crc32($url);   $result=sprintf("%u",$url);   return code62($result); } echo shorturl('http://www.jb51.net/'); //1EeIv2

使用以上PHP代碼可以產生唯一的6位的短網址,然後我們將產生的短網址與原網址一起寫入到MySQL表中,插入資料庫的代碼這裡我就不寫了,這是PHP基礎。
接著,我們有一個link.php用來接收讀取url並實現真實跳轉。

include_once('connect.php'); //串連資料庫 $url = $_GET['url']; if(isset($url) && !empty($url)){   $sql = "select url from shorturl where codeid='$url'";   $query = mysql_query($sql);   if($row=mysql_fetch_array($query)){     $real_url = $row['url'];     header('Location: ' . $real_url);   }else{     header('HTTP/1.0 404 Not Found');     echo 'Unknown link.';   } }else{   header('HTTP/1.0 404 Not Found');   echo 'Unknown link.'; }

代碼中,如果得到短網址對應的真實url,會使用header跳轉到真實的頁面上去,否則返回404代碼。這樣我們可以使用如: http://yourdomain/link.php?url=xxx來實現短網址訪問。

繼續,我們使用URL rewrite即重寫功能來實現諸如可以通過地址:http://yourdomain/xxx 來訪問。

以下是rewrite規則:

#Apache規則: RewriteRule ^/(.*)$ /link.php?url=$1 [L]  #如果使用nginx,規則這樣寫: rewrite ^/(.*)$ /link.php?url=$1 last;

方案2:PHP+ini實現短網址技術

對於方案1使用資料庫的做法好處就是操作方便,而大量短網址查詢需要做最佳化。而方案2則放棄資料庫,使用ini配置,我們將短網址和真實網址配置在ini檔案中,PHP直接通過parse_ini_file()讀取ini檔案,幾行代碼就可以實現短網址的跳轉。
links.ini檔案像這樣配置:

baidu  = https://www.baidu.com/ qq    = http://www.qq.com/ hw    = http://www.hw.com/ dm    = http://www.dm.com/view-blog-362.html

而index.php的代碼可以這樣寫:

$links = parse_ini_file('links.ini');  if(isset($_GET['l']) && array_key_exists($_GET['l'], $links)){   header('Location: ' . $links[$_GET['l']]); } else{   header('HTTP/1.0 404 Not Found');   echo 'Unknown link.'; }

當然,我們還需要配置下rewrite規則。

#Apache規則: RewriteRule ^/(.*)$ /index.php?l=$1 [L]  #如果使用nginx,規則這樣寫: rewrite ^/(.*)$ /index.php?l=$1 last;

好了,我們現在訪問網址:http://demo.jb51.net/dm,它直接跳轉到實際網址:http://www.jb51.net/view-blog-362.html。
相比來說,第二種方案適合小型的應用,你還可以把url地址做成數組形式儲存,還可以做一個管理介面專門維護這些短網址。

第三種方案:php版的短連結產生方法

<?phpfunction shorturl($input) {$base32 = array ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h','i', 'j', 'k', 'l', 'm', 'n', 'o', 'p','q', 'r', 's', 't', 'u', 'v', 'w', 'x','y', 'z', '0', '1', '2', '3', '4', '5'); $hex = md5($input);$hexLen = strlen($hex);$subHexLen = $hexLen / 8;$output = array(); for ($i = 0; $i < $subHexLen; $i++) {//把加密字元按照8位一組16進位與0x3FFFFFFF(30位1)進行位與運算$subHex = substr ($hex, $i * 8, 8);$int = 0x3FFFFFFF & (1 * ('0x'.$subHex));$out = ''; for ($j = 0; $j < 6; $j++) { //把得到的值與0x0000001F進行位與運算,取得字元數組chars索引$val = 0x0000001F & $int;$out .= $base32[$val];$int = $int >> 5;} $output[] = $out;} return $output;}?>

總結:

使用者訪問短網址 時的過程:

1、瀏覽器訪問短網址http://short.cn/Xvdf23,經過DNS解析會指向到http://short.cn的伺服器。
2、伺服器根據短網址中的ID欄位尋找資料庫,返回原始網址。
3、重新導向到上面返回的原始網址

總結:以上就是本篇文的全部內容,希望能對大家的學習有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.