`

创建一个简单的短链服务类

阅读更多

整理一个简单的短链算法,整理到自己的代码库中:

 

<?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.zip

    开源的短网址程序Myurl 1.3是一个基于PHP开发的短链接系统,适用于个人或组织自建短链服务。这个程序的特点在于它的开源性质,允许用户自由地查看、修改和分发源代码,以便根据自己的需求进行定制。在描述中提到,该...

    Laravel开发-honeycomb-url-shortener .zip

    用户可能可以通过一个简单的表单提交长URL,然后获取短链。 7. **Artisan命令**:Laravel的Artisan命令行工具可以用于创建自定义的命令,例如批量生成短链、迁移数据库结构等。这可以自动化部分开发流程,提高效率...

    python有趣的库简单分享.docx

    支持多种短链服务提供商,如 Bitly、TinyURL 等。 - **应用场景**: - 社交媒体营销中分享较短链接。 - 简化 URL 地址,便于记忆和分享。 - **使用方法**:安装后选择相应的服务并调用相应方法来缩短 URL。 ###...

    php生成二维码完整类库.zip

    总的来说,"php生成二维码完整类库"为PHP开发者提供了一个便捷的工具,可以帮助他们轻松地在项目中引入二维码功能,无论是创建简单的链接分享,还是复杂的数据交换,都能得心应手。只要理解并掌握了这个类库的使用,...

    yourls-1.4.3汉化修改版

    【yourls-1.4.3汉化修改版】是一个基于PHP开发的开源URL短链接服务系统,专门用于创建简短、易于分享的网址。这个版本是原版YOURLS(Yet Another URL Shortener)的1.4.3版本,经过汉化处理,更适合中文用户使用。...

    shorturl.cr:一个使用URL缩短服务的小型库

    `shorturl.cr`是一个使用Crystal编程语言实现的轻量级库,专门用于与各种URL缩短服务进行交互,帮助开发者轻松地整合URL缩短功能到自己的应用中。 **一、Crystal编程语言简介** Crystal是一种现代、静态类型的系统...

    curl-master.zip_curl_vendor

    `curl-master.zip_curl_vendor` 是一个包含 `curl` 扩展源代码的压缩包,专为PHP设计,便于在脚本中实现HTTP GET和POST请求。`curl` 是一个非常流行...这个封装对于任何需要与Web服务交互的PHP项目都是一个宝贵的资源。

    youarefree:整理

    综合以上信息,"youarefree"项目可能是一个轻量级的工具或服务,主要用于链接处理,具有良好的可读性和易用性。项目的核心代码存储在"youarefree-main"目录下,可能包括了实现链接转换功能的源代码文件、测试脚本、...

    EUrl the Easy URL Generator-开源

    它为开发者提供了一个简单易用、面向对象的接口,使得在程序中构建和管理URL变得更加便捷。面向对象的设计使得EUrl可以很好地融入各种编程环境中,提供了丰富的输入选项以适应不同的URL构造需求。 在URL生成过程中...

    寡糖

    【寡糖】与【oliviamevorach.github.io】似乎关联性不大,因为"寡糖"通常是指在生物化学领域中的短链糖分子,而"oliviamevorach.github.io"则是一个GitHub个人主页的URL,通常与网页开发或开源项目相关。然而,由于...

    URL Shortener - USH.MX-crx插件

    "URL Shortener - USH.MX-crx插件" 是一个专门用于缩短网址的浏览器扩展程序。USH.MX是该服务的标识,CRX是Chrome扩展的文件格式,表明这个插件是为谷歌浏览器设计的。这款扩展帮助用户轻松地将长网址转化为更简洁的...

    百度mp3搜索-易语言

    例如,如果我们知道MP3链接通常以"http://music.baidu.com/song/"开头,我们可以编写一个正则表达式来匹配这类URL。在实际应用中,我们还需要考虑各种可能的变体,比如URL可能存在短链、包含参数等情况,这就需要...

Global site tag (gtag.js) - Google Analytics