PHP實現URL長串連轉短串連方法總結

來源:互聯網
上載者:User

標籤:短鏈   comment   裝包   重啟   利用   自己   get   短串連   原理   

短連結,通俗來說,就是將長的URL 網址,通過程式計算等方式,轉換為簡短的網址字串。

這樣的話其好處為:1、內容需要;2、方便使用;3、便於管理。

實現短網址(short URL)系統比較流行的演算法有兩種 自增序列演算法、 摘要演算法

自增序列演算法:

自增序列演算法 也叫永不重複演算法

設定 id 自增,一個 10進位 id 對應一個 62進位的數值,1對1,也就不會出現重複的情況。這個利用的就是低進位轉化為高進位時,字元數會減少的特性。

摘要演算法:

1、將長網址 md5 產生 32 位簽名串,分為 4 段, 每段 8 個位元組

2、對這四段迴圈處理, 取 8 個位元組, 將他看成 16 進位串與 0x3fffffff(30位1) 與操作, 即超過 30 位的忽略處理

3、這 30 位分成 6 段, 每 5 位的數字作為字母表的索引取得特定字元, 依次進行獲得 6 位字串

4、總的 md5 串可以獲得 4 個 6 位串,取裡面的任意一個就可作為這個長 url 的短 url 地址

這種演算法,雖然會產生4個Code,但是仍然存在重複幾率

以上兩種演算法具體實現原理參考:短網址(short URL)系統的原理及其實現

 

依據第二種演算法,URL長串連轉短串連實現方法如下:

語言:PHP5.6

伺服器環境:LNMP

假設:長串連地址:http://www.test.com/index.php

   短串連地址:http://t.test.com/六位code碼

第一步:利用shortUrl()函數,產生短串連Code碼,並將資料存入Mysql資料庫;

函數shorturl():

<?php  /**  * 由長串連產生短連結操作  *   * 演算法描述:使用6個字元來表示短連結,我們使用ASCII字元中的‘a‘-‘z‘,‘0‘-‘9‘,‘A‘-‘Z‘,共計62個字元做為集合。  *           每個字元有62種狀態,六個字元就可以表示62^6(56800235584),那麼如何得到這六個字元,  *           具體描述如下:  *        1. 對傳入的長URL+設定key值 進行Md5,得到一個32位的字串(32 字元十六進位數),即16的32次方;  *        2. 將這32位分成四份,每一份8個字元,將其視作16進位串與0x3fffffff(30位1)與操作, 即超過30位的忽略處理;  *        3. 這30位分成6段, 每5個一組,算出其整數值,然後映射到我們準備的62個字元中, 依次進行獲得一個6位的短連結地址。  *   */  function shortUrl( $long_url )  {      $key = ‘swz0823‘; //自訂key值    $base32 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";            // 利用md5演算法方式產生hash值      $hex = hash(‘md5‘, $long_url.$key);      $hexLen = strlen($hex);      $subHexLen = $hexLen / 8;            $output = array();      for( $i = 0; $i < $subHexLen; $i++ )      {          // 將這32位分成四份,每一份8個字元,將其視作16進位串與0x3fffffff(30位1)與操作          $subHex = substr($hex, $i*8, 8);          $idx = 0x3FFFFFFF & (1 * (‘0x‘ . $subHex));                    // 這30位分成6段, 每5個一組,算出其整數值,然後映射到我們準備的62個字元          $out = ‘‘;          for( $j = 0; $j < 6; $j++ )          {              $val = 0x0000003D & $idx;              $out .= $base32[$val];              $idx = $idx >> 5;          }          $output[$i] = $out;      }            return $output;  }      $url = ‘http://www.test.com/index.php‘;//長串連  $ret = shortUrl($url);  var_dump($ret);      ################ 列印結果 ################  /* array(4) {     [0]=>     string(6) "2aEzqe"     [1]=>     string(6) "Rj6Bve"     [2]=>     string(6) "f2mQvi"     [3]=>     string(6) "z2eqYv" } */  #將長串連url與短連結Code結果存入資料庫,取其中一個用於顯示即可。例:短串連地址:http://t.test.com/2aEzqe

資料庫結構(可自訂):

CREATE TABLE `long_short_url` (  `id` int(32) unsigned NOT NULL AUTO_INCREMENT,  `long_url` varchar(255) DEFAULT NULL,  `short_url_code` varchar(255) DEFAULT NULL,  `create_time` varchar(32) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=387 DEFAULT CHARSET=utf8;

 

第二步:伺服器301/302重新導向Api介面如下,(假如此Api介面地址:http://www.test.com/api/longUrl?code=六位code碼)

public function longUrl(){    $map[‘short_url‘] = $_GET[‘code‘];    $data =M(‘long_short_url‘)->where($map) ->find();    $url = $data[‘long_url‘];    header("location:$url");}

 

第四部:修改Nginx伺服器nginx.conf設定檔

在底部(任意位置)增添以下代碼:

server {listen 80;server_name t.test.com;rewrite ^/(.*) http://www.test.com/Api/longUrl?code=$1 redirect;access_log off;}

然後儲存,重啟Nginx伺服器。

當我們請求通過短串連地址:http://t.test.com/2aEzqe時, 伺服器會通過Code短碼 2aEzqe 擷取對應的長 URL,並通過HTTP 301/302重新導向到對應的長串連地址;

 

 

另外:

1.自增序列演算法實現方法參考執行個體:php實現短連結系統

2.PHP開源短串連產生系統:YOURLS 

YOURLS (Your Own URL Shortener) 是一款使用PHP+Mysql開發的短連結程式,讓你可以輕鬆建立屬於自己的短網址產生系統。而無需第三方平台你就可以獲得所有的資料統計,並且支援一系列外掛程式擴充。

安裝流程:

  1. 將安裝包解壓並上傳至伺服器;
  2. 將 user/config-sample.php 重新命名為 user/config.php
  3. 編輯 user/config.php 檔案,填入資料庫資訊和配置網站等選項;
  4. 訪問 http://yoursite.com/admin/ 即可!

 

PHP實現URL長串連轉短串連方法總結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.