URL缩短:使用inode作为短名称?

时间:2009-08-24 17:01:22

标签: php url url-shortener short-url

我正在开发的网站希望生成自己缩短的网址,而不是依赖像tinyurl或bit.ly这样的第三方。

显然,我可以保留一个新的URL,因为它们被添加到网站并使用它来生成短URL。但是我试图避免这种情况,如果可能的话,因为看起来很多工作只是为了使这一件事成功。

由于需要短网址的内容都是网络服务器上的真实物理文件,我目前的解决方案是使用他们的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;
}

3 个答案:

答案 0 :(得分:13)

不确定这是一个好主意:如果您必须更换服务器,或更改磁盘/重新格式化,您的文件的inode编号很可能会更改...并且您的所有短网址都将被破坏/丢失!< / p>

如果出于任何原因,您需要将文件移动到磁盘的另一个分区,顺便说一下。顺便提一下。


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

以下是几篇关于此事的文章:

答案 1 :(得分:2)

在那里巧妙地使用文件系统。如果保证inode ID是唯一的,则可以快速生成唯一编号。我想知道这是否可以在NFS上保持一致,因为显然不同的机器将具有不同的inode数量。然后,您只需在您创建的文件中序列化链接信息。

为了缩短网址,您可能会考虑区分大小写,并执行其中一项安全编码(您将从中获得base62 - 10 [0-9] + 26(az)+ 26( AZ),或者如果你删除一些'冲突'字母,如I vs l vs 1 ......或者更少...有很多例子/库。

你也希望像你说的那样用偏移量“回家”你的ids。您还需要弄清楚如何通过占用密钥空间来保持临时文件/日志文件等的创建。

答案 2 :(得分:0)

查看Sean Inman的Lessn;还没有使用它,但它是一个自我托管的滚动你自己的URL解决方案。