生成短链接

<?php
/**
 * 根据原始URL生成短链接KEY值
 *
 * @param string $url 原始URL
 * @return string 短链接KEY值
 */
function short_url(string $url): string
{
    $length = 6; // 短链接KEY值长度

    $key = ''; // 短链接KEY值

    // 短链接KEY值组成字符
    $char = [
        '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'
    ];


    $sub = substr(md5($url), 0, 8); // 将原始URL进行MD5运算,然后取出哈希字符串前8个字符
    $dec = hexdec("0x$sub"); // 十六进制string转十进制int
    $int = 0x3FFFFFFF & $dec; // 与运算,0x3FFFFFFF(十六进制)=1073741823(十进制)=2^30-1

    for ($i = 0; $i < $length; $i++) {
        $key .= $char[0x0000001F & $int]; // 0x0000001F(十六进制)=31(十进制)
        $int >>= 5; // 右移运算
    }

    unset($int);

    return $key;
}

$host = 'http://mn.co'; // 负责短链接跳转的主机地址

$url = 'http://www.manong.life/index.html?name=张三&age=18'; // 原始URL

$key = short_url($url); // 短链接KEY值

echo "短链接地址:$host/$key"; // 短链接地址:http://mn.co/5norw2


//========== 总结 ==========//
// 1、短链接KEY值和原始URL是一对一的关系,需要将它们保存到数据库中。

Copyright © 2024 码农人生. All Rights Reserved