利用PHP实现短域名互转


Posted in PHP onJuly 05, 2013
/**
  * 短域名生成&解析类
  */
 class Build_URL {     private $mem;
     private $base_url = 'http://xxx.com/';
     public function  __construct() {
         $mem_conf    = array(
                 array(
                         'host'    => '192.168.10.90',
                         'port'    => '11116'
                 ),
                 array(
                         'host'    => '192.168.10.90',
                         'port'    => '11117'
                 ),
         );
         $this->mem    = new Memcache();
         foreach ($mem_conf as $v) {
             $this->mem->addServer($v['host'], $v['port']);
         }
     }
     public function encode($url) {
         $url    = trim($url);
         if(!preg_match("#^[http://|https://|ftp://]#iS", $url)) {
             return false;
         }
         $md5    = md5($url);
         $aid    = $this->mem->get($md5);
         if(!$aid) {
             if(($aid = $this->mem->increment('auto_increment_id')) === false) {
                 $this->mem->set('auto_increment_id', 10000);
                 $aid = $this->mem->increment('auto_increment_id');
             }
             $this->mem->set($md5, $aid);
             $key    = $this->dec2any($aid);
             $this->mem->set($key, $url);
         } else {
             $key    = $this->dec2any($aid);
         }
         return $this->base_url.$key;
     }
     public function decode($url) {
         $key    = str_replace($this->base_url, '', trim($url));
         return $this->mem->get($key);
     }
     private function dec2any($num, $base=62, $index=false) {
         $out = '';
         if (! $base ) {
             $base = strlen($index);
         } else if (! $index ) {
             $index = substr("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ,0 ,$base);
         }
         $t = ($num == 0) ? 0 : floor(log10($num) / log10($base));
         for ($t; $t >= 0; $t--) {
             $a = floor($num / pow( $base, $t ));
             $out = $out . substr($index, $a, 1);
             $num = $num - ($a * pow( $base, $t ));
         }
         return $out;
     }
 }
 $app = new Build_URL();
 $url = array(
     'http://www.baidu.com',
     'http://www.google.com',
     'https://3water.com'
 );
 foreach ($url as $v) {
     $sort    = $app->encode($v);
     echo "sort link: ".$sort."\n";
     $original    = $app->decode($sort);
     echo "original: ".$original."\n";
 }
 ?>
PHP 相关文章推荐
PHP数据库操作面向对象的优点
Oct 09 PHP
浅谈apache和nginx的rewrite的区别
Feb 22 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
Dec 25 PHP
php+mysqli使用预处理技术进行数据库查询的方法
Jan 28 PHP
PHP判断网络文件是否存在的方法
Mar 12 PHP
使用PHP生成二维码的方法汇总
Jul 22 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 PHP
PHP数据库编程之MySQL优化策略概述
Aug 16 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 PHP
PHP Web表单生成器案例分析
Jun 02 PHP
PHP 安全检测代码片段(分享)
Jul 05 #PHP
如何使用php判断服务器是否是HTTPS连接
Jul 05 #PHP
使用PHP实现蜘蛛访问日志统计
Jul 05 #PHP
PHP系统命令函数使用分析
Jul 05 #PHP
解析PHP实现下载文件的两种方法
Jul 05 #PHP
国外十大最流行的PHP框架排名
Jul 04 #PHP
php字符串截取的简单方法
Jul 04 #PHP
You might like
杏林同学录(四)
2006/10/09 PHP
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
codeigniter框架批量插入数据
2014/01/09 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
JS跨域总结
2012/08/30 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
解析vue data不可以使用箭头函数问题
2018/07/03 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
python中利用队列asyncio.Queue进行通讯详解
2017/09/10 Python
简述Python2与Python3的不同点
2018/01/21 Python
python爬虫爬取网页表格数据
2018/03/07 Python
python requests使用socks5的例子
2019/07/25 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
python Opencv计算图像相似度过程解析
2019/12/03 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
开水果连锁店创业计划书
2013/12/29 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
python通过新建环境安装tfx的问题
2022/05/20 Python