2009-08-24 59 views
0

我正在处理的网站想要生成自己的缩短网址,而不是依赖像tinyurl或bit.ly这样的第三方。URL缩短:使用inode作为短名称?

很显然,我可以继续,因为它们添加到站点的运行计数新网址,并用它来生成短网址。但我试图尽可能避免这种情况,因为为了使这一件事情起作用似乎很多工作。

由于需要短网址的东西是在Web服务器上的所有真实的物理文件我目前的解决方案是那些已经对我产生准备使用,并保证是唯一使用其inode编号。

function short_name($file) { 
    $ino = @fileinode($file); 
    $s = base_convert($ino, 10, 36); 
    return $s; 
} 

这似乎工作。问题是,我可以做些什么来使短网址更短?

在其中此正被使用的系统中,用于新添加的文件的inode的是在使功能的范围内上述返回字符串长7个字符。

我可以放心地扔掉一些inode的位(一半?)?如果是这样,它应该是高位还是低位?

我想用文件名的CRC32,但实际上使我的短名称比使用inode的更长。

这样的事情会有碰撞的风险吗?我可以通过选择正确的“$ referencefile”值来获得单个数字。

function short_name($file) { 
    $ino = @fileinode($file); 
    // arbitrarily selected pre-existing file, 
    // as all newer files will have higher inodes 
    $ino = $ino - @fileinode($referencefile); 
    $s = base_convert($ino, 10, 36); 
    return $s; 
} 

回答

13

不知道这是一个好主意:如果你要改变服务器,或更改磁盘/重新格式化,文件的索引节点号将很可能改变......而所有的短网址将被打破/ 丢失 !如果

同样的事情,因为任何原因,您需要将您的文件移动到硬盘的其他分区,顺便说一句。


另一个想法可能是计算一些crc/md5 /无论文件的名称,如你所建议的,并使用一些算法来“缩短”它。

以下是关于一对夫妇的文章:

+2

好点。 URI的一个关键方面是它们绝对不应该改变 - http://www.w3.org/Provider/Style/URI - 并且这违反了它。 – ceejayoz 2009-08-24 17:09:48

+1

另一个风险是无意中允许访问您不希望允许的数据。例如,假设用户请求inode 17,并且恰好是/ etc/shadow(或者它们请求1111,这恰好是到/ etc/shadow的链接)。您必须进行额外的检查以确保文件位于您期望的目录中,并且这可能不是微不足道的... – atk 2009-08-24 17:29:02

0

退房Lessn由肖恩·英曼;还没有玩过,但它是一个自行托管的自己的URL解决方案。

2

相当聪明地使用那里的文件系统。如果您确定inode id独一无二,那么可以快速生成唯一编号。我想知道这是否可以在NFS上一致地工作,因为显然不同的机器会有不同的inode编号。然后,您只需在您创建的文件中序列化链接信息。你可能会考虑区分大小写,并做一个安全的编码(你会得到大约base62 - 10 [0-9] + 26(az)+ 26 (AZ),或者更少,如果你删除了一些'冲突'字母,如I vs l vs 1 ...有大量的例子/库在那里)。

你也想像你说的那样用偏移量“回归”你的ID。你还需要弄清楚如何保持临时文件/日志文件等的创建吃掉你的密钥空间。