<?php
#短连接生成算法 class Short_Url {
#字符表
public static $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; public static function short($url) {
$key = "alexis";
$urlhash = md5($key . $url);
$len = strlen($urlhash); #将加密后的串分成4段,每段4字节,对每段进行计算,一共可以生成四组短连接
for ($i = ; $i < ; $i++) {
$urlhash_piece = substr($urlhash, $i * $len / , $len / );
#将分段的位与0x3fffffff做位与,0x3fffffff表示二进制数的30个1,即30位以后的加密串都归零
$hex = hexdec($urlhash_piece) & 0x3fffffff; #此处需要用到hexdec()将16进制字符串转为10进制数值型,否则运算会不正常 $short_url = "http://t.cn/";
#生成6位短连接
for ($j = ; $j < ; $j++) {
#将得到的值与0x0000003d,3d为61,即charset的坐标最大值
$short_url .= self::$charset[$hex & 0x0000003d];
#循环完以后将hex右移5位
$hex = $hex >> ;
} $short_url_list[] = $short_url;
} return $short_url_list;
}
} $url = "http://www.cnblogs.com/zemliu/";
$short = Short_Url::short($url);
print_r($short);
?>

Array ( [0] => http://t.cn/KyfLyH [1] => http://t.cn/bPafHS [2] => http://t.cn/H880aD [3] => http://t.cn/TmvDK0 )

生成的短url存到服务器里,做一个映射,short_url => original_url,输入短url的时候按照映射转回长url,然后访问原始url即可

PS:另外有一种想法,就是把url按照顺序存贮,第一条为aaaaaa,第二条为aaaaab..以此类推,不需要hash,这样不就不会重复了吗。。 - -

PHP 短连接生成的更多相关文章

  1. PHP 短连接生成算法

    短连接生成类: <?php #短连接生成算法 class Short_Url { #字符表 public static $charset = "0123456789ABCDEFGHIJ ...

  2. 稳定好用的短连接生成平台,支持API批量生成

    ​ https://www.5w.fit/ 01 安全:快码拥有两种模式:防封模式和极速模式,防封模式使短链更加安全! 02 无流量劫持:快码短链绝不劫持流量! 03 极速:专属大量服务器,支持高并发 ...

  3. PHP实现URL长连接转短连接方法总结

    短链接,通俗来说,就是将长的URL 网址,通过程序计算等方式,转换为简短的网址字符串. 这样的话其好处为:1.内容需要:2.用户友好:3.便于管理. 实现短网址(short URL)系统比较流行的算法 ...

  4. 使用新浪API生成短连接

    公司最近需要进行短信推广,需要发送大批量带有连接地址的短信给用户,并且需要统计短信的点击量.因为需要考虑短信成本问题,需要将长连接地址生成比较短的连接.因为公司本身没有短的一级域名,所以考虑到使用第三 ...

  5. plv8 + hashids 生成短连接id

    此文章是转载文章的一个学习,稍有改动 环境准备 plv8 环境 version: '3.6' services:  postgres:    image: dalongrong/plv8:2.3.12 ...

  6. PHP生成短连接的方法

    PHP生成短连接的方法.md PHP生成短连接的方法 直接贴上方法,函数可以查看手册. <?php /** 生成短网址 * @param String $url 原网址 * @return St ...

  7. HTTP的长连接和短连接

        本文总结&分享网络编程中涉及的长连接.短连接概念.     关键字:Keep-Alive,并发连接数限制,TCP,HTTP 一.什么是长连接 HTTP1.1规定了默认保持长连接(HTT ...

  8. HTTP长连接短连接

    一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待 ...

  9. HTTP协议中的长连接和短连接(keep-alive状态)

    什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待在同 ...

随机推荐

  1. Python 中文编码问题小结

    1. 下面的语句要放在代码开头,指定文件编码, 可以识别 脚本中的所有字符和中文. # -*- coding:utf-8 -*- 2. codecd 编码转换 如果想要读取文本中的中文,需要借助于co ...

  2. python 常用内置函数

    编译,执行 repr(me)                          # 返回对象的字符串表达 compile("print('Hello')",'test.py','e ...

  3. bzoj 1101 zap

    gcd(x,y)=d-->gcd(x/d,y/d)=1. 即求Σ(i<=n/d)Σ(j<=m/d) e(gcd(i,j)) 因为e=miu×1,可以卷积. 因为多组询问,需要sqrt ...

  4. 【BZOJ-4561】圆的异或并 set + 扫描线

    4561: [JLoi2016]圆的异或并 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 254  Solved: 118[Submit][Statu ...

  5. webapi获取IP的方式

    using System.Net.Http; public static class HttpRequestMessageExtensions { private const string HttpC ...

  6. git命令的使用 【备用】

    *下面为对本地仓库进行操作 [将文件提交到本地仓库] git add 文件名                     将文件添加到暂存区 git status                      ...

  7. 2016.8.14安装myplayer心得

    安装mplayer时,我有两个os是not found状态,我在其他地方找到后 which mplayer,找到mplayer的配置界面,找到not found的部分,并且从usr/lib中找到相应的 ...

  8. String 与StringBuffer的区别与使用

    摘自:http://www.cnblogs.com/kaituorensheng/p/3776484.html 区别: String类是字符串常量,是不可更改的常量.而StringBuffer是字符串 ...

  9. HTML5学习总结-08 应用缓存(Application Cache)

    一 应用缓存(Application Cache) 1 应用缓存 HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. 应用程序缓存为应用带来三个优势: ...

  10. POJ1741:tree

    传送门 时隔一个月再次写点分治,比上一次要深入理解很多了.(虽然代码还是写不熟 模板题,不多说 //POJ 1741 //by Cydiater //2016.9.22 #include <cs ...