• PHP实现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/ 即可!
  • 相关阅读:
    微软的十年之变
    如何在易受攻击的SSD上禁用硬件BitLocker加密
    Tech Summit 2018见闻:我们,MVP
    Tech Summit 2018见闻:IT之家读者捕捉铺路集团董事长玄隐
    Windows 10怎么了?
    循环队列
    模拟键盘事件
    模拟鼠标事件
    进程间通信——— 匿名管道
    进程间通信——— LPC
  • 原文地址:https://www.cnblogs.com/bluealine/p/11038765.html
Copyright © 2020-2023  润新知