整理一个简单的短链算法,整理到自己的代码库中:
<?php /** * 短链服务 * @author vb2005xu */ class Service_ShortUrlGenerator { private static $table = 'short_url'; private static $list = array(); function __construct(array $config) { if ( empty($config['db']) ) { throw BaseError::invalid_parameters_error('key "db" not set'); } $this->_db = $config['db']; } /** * 获取指定用户创建的短链集合 * * @param int $uid * @param int $skip * @param int $limit * * @return array */ function getAllByUid( $uid , $skip=0, $limit=10 ) { $rows = DataSource::instance($this->_db)->select(self::$table,array( 'uid' => $uid, ),'*',null,$skip,$limit); return $rows; } /** * 获取指定用户创建的短链总数 * * @param int $uid * * @return int */ function getCountByUid( $uid ) { return DataSource::instance($this->_db)->count(self::$table,array( 'uid' => $uid, )); } /** * 通过短链标识 获取对应的 url * * @param string $identify * @param int $uid * * @return string */ function decode( $identify , $uid ) { $uid = intval($uid); if ( !empty($identify) && $uid > 0 ) { $identify = trim($identify); if ( strlen( $identify ) == 6 ) { if ( !isset( self::$list[$id] ) ) { $row = DataSource::instance($this->_db)->find_one(self::$table,array( 'uid' => $uid, 'identify' => $identify, ),'link'); self::$list[$identify] = empty($row['link']) ? NULL : $row['link']; } return self::$list[$identify]; } } return null; } /** * 返回6位的短链标识 * * @param string $url * * @return string */ function encode( $url , $uid ) { $uid = intval($uid); if ( !empty($url) && $uid > 0 ) { $url = trim($url); $identify = self::generate( $url ); # 放在此处做下缓存 self::$list[$identify] = $url; # 因为 uid + identify 做了唯一键索引,故此处不进行数据存在校验 DataSource::instance($this->_db)->insert(self::$table,array( 'uid' => $uid, 'identify' => $identify, 'link' => $link, 'create_at' => APP_START_TIMESTAMP, )); return $identify; } return null; } /** * 返回6位的短链标识 * * @param string $url * * @return string */ static function identify( $url ) { if ( empty($url) ) return FALSE; return self::code62( sprintf("%u", crc32($url)) ); } private static function code62($x) { $show = ''; while($x > 0) { $s = $x % 62; if ($s > 35) { $s = chr($s+61); } elseif ($s > 9 && $s <=35) { $s = chr($s + 55); } $show .= $s; $x = floor($x/62); } return $show; } }
相关推荐
开源的短网址程序Myurl 1.3是一个基于PHP开发的短链接系统,适用于个人或组织自建短链服务。这个程序的特点在于它的开源性质,允许用户自由地查看、修改和分发源代码,以便根据自己的需求进行定制。在描述中提到,该...
用户可能可以通过一个简单的表单提交长URL,然后获取短链。 7. **Artisan命令**:Laravel的Artisan命令行工具可以用于创建自定义的命令,例如批量生成短链、迁移数据库结构等。这可以自动化部分开发流程,提高效率...
支持多种短链服务提供商,如 Bitly、TinyURL 等。 - **应用场景**: - 社交媒体营销中分享较短链接。 - 简化 URL 地址,便于记忆和分享。 - **使用方法**:安装后选择相应的服务并调用相应方法来缩短 URL。 ###...
总的来说,"php生成二维码完整类库"为PHP开发者提供了一个便捷的工具,可以帮助他们轻松地在项目中引入二维码功能,无论是创建简单的链接分享,还是复杂的数据交换,都能得心应手。只要理解并掌握了这个类库的使用,...
【yourls-1.4.3汉化修改版】是一个基于PHP开发的开源URL短链接服务系统,专门用于创建简短、易于分享的网址。这个版本是原版YOURLS(Yet Another URL Shortener)的1.4.3版本,经过汉化处理,更适合中文用户使用。...
`shorturl.cr`是一个使用Crystal编程语言实现的轻量级库,专门用于与各种URL缩短服务进行交互,帮助开发者轻松地整合URL缩短功能到自己的应用中。 **一、Crystal编程语言简介** Crystal是一种现代、静态类型的系统...
`curl-master.zip_curl_vendor` 是一个包含 `curl` 扩展源代码的压缩包,专为PHP设计,便于在脚本中实现HTTP GET和POST请求。`curl` 是一个非常流行...这个封装对于任何需要与Web服务交互的PHP项目都是一个宝贵的资源。
综合以上信息,"youarefree"项目可能是一个轻量级的工具或服务,主要用于链接处理,具有良好的可读性和易用性。项目的核心代码存储在"youarefree-main"目录下,可能包括了实现链接转换功能的源代码文件、测试脚本、...
它为开发者提供了一个简单易用、面向对象的接口,使得在程序中构建和管理URL变得更加便捷。面向对象的设计使得EUrl可以很好地融入各种编程环境中,提供了丰富的输入选项以适应不同的URL构造需求。 在URL生成过程中...
【寡糖】与【oliviamevorach.github.io】似乎关联性不大,因为"寡糖"通常是指在生物化学领域中的短链糖分子,而"oliviamevorach.github.io"则是一个GitHub个人主页的URL,通常与网页开发或开源项目相关。然而,由于...
"URL Shortener - USH.MX-crx插件" 是一个专门用于缩短网址的浏览器扩展程序。USH.MX是该服务的标识,CRX是Chrome扩展的文件格式,表明这个插件是为谷歌浏览器设计的。这款扩展帮助用户轻松地将长网址转化为更简洁的...
例如,如果我们知道MP3链接通常以"http://music.baidu.com/song/"开头,我们可以编写一个正则表达式来匹配这类URL。在实际应用中,我们还需要考虑各种可能的变体,比如URL可能存在短链、包含参数等情况,这就需要...