PHP实现短链功能
发布人:shili8
发布时间:2023-01-30 14:14
阅读次数:34
function shortUrl($url)
{
$charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
$key = 'WOOD-HEAD'; //加盐
$urlHash = md5($key . $url);
$len = strlen($urlHash);
//将加密后的串分成4段,每段4字节,对每段进行计算,一共可以生成四组短连接
$shortUrlList = [];
for ($i = 0; $i < 4; $i++) {
$urlHashPiece = substr($urlHash, $i * $len / 4, $len / 4);
//将分段的位与0x3fffffff做位与,0x3fffffff表示二进制数的30个1,即30位以后的加密串都归零
//此处需要用到hexdec()将16进制字符串转为10进制数值型,否则运算会不正常
$hex = hexdec($urlHashPiece) & 0x3fffffff;
//域名根据需求填写
$shortUrl = '';
//生成6位短网址
for ($j = 0; $j < 6; $j++) {
//将得到的值与0x0000003d,3d为61,即charset的坐标最大值
$shortUrl .= $charset[$hex & 0x0000003d];
//循环完以后将hex右移5位
$hex = $hex >> 5;
}
$shortUrlList[] = $shortUrl;
}
return $shortUrlList;
}
$input = 'https://betheme.net/houduan/693900.html?action=onClick';//长链
$output =shortUrl($input);
结果: array(4) {
[0]=>
string(6) “irrvLC”
[1]=>
string(6) “aPq9OS”
[2]=>
string(6) “u9qbX1”
[3]=>
string(6) “vfrLC0”
}
取任意一个值或是全部都存,让单个短链都对应上面的长链,存数据库,将短链返回个客户端。
用户端通过携带该短链参数,去数据库中查找长链,并访问,这样就实现短链跳转长链接了。