php 长连接短链接,PHP实现URL长连接生成短链接操作

短链接,通俗来说,就是将长的URL 网址,通过程序计算等方式,转换为简短的网址字符串。

这样的话其好处为:1、内容需要;2、用户友好;3、便于管理。

早期短链接广泛应用于图片上传网站,通过缩短网址URL链接字数,达到减少代码字符串的目的。更便于使用者引用网址,写入代码中,“节省”字符数空间。常见于网店图片分类的使用,因有字符限制,运用短链接,达到外链图片的目的。自微博盛行以来,在微博字数有限的特色下,短链接也盛行于微博网站,以节省字数,给博主发布更多文字的空间。<?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位的短链接地址。

*

* @author flyer0126

* @since 2012/07/13

*/

function shortUrl( $long_url )

{

$key = 'flyer0126';

$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://flyer0126.iteye.com/';

$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与短链接结果存入数据库,取其中一个用于显示即可。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值