【问题标题】:URL shortening: using inode as short name?URL 缩短:使用 inode 作为短名称?
【发布时间】:2009-08-24 17:01:21
【问题描述】:

我正在处理的网站希望生成自己的缩短 URL,而不是依赖于 tinyurl 或 bit.ly 等第三方。

显然,我可以在将新 URL 添加到站点时对它们进行计数,并使用它来生成短 URL。但如果可能的话,我会尽量避免这种情况,因为要让这件事发挥作用似乎需要做很多工作。

由于需要短 URL 的东西都是网络服务器上的真实物理文件,因此我当前的解决方案是使用它们的 inode 编号,因为这些编号已经生成供我使用并保证是唯一的。

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

这似乎有效。问题是,我该怎么做才能使短 URL 更短?

在使用它的系统上,新添加的文件的 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;
}

【问题讨论】:

    标签: php url url-shortener short-url


    【解决方案1】:

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

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


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

    这里有几篇关于此的文章:

    【讨论】:

    • 好点。 URI 的一个关键方面是它们永远不应该改变 - w3.org/Provider/Style/URI - 这会违反它。
    • 另一个风险是无意中允许访问您不希望允许的数据。例如,假设用户请求 inode 17,而这恰好是 /etc/shadow(或者他们请求 1111,恰好是 /etc/shadow 的链接)。您必须进行额外的检查以确保该文件位于您期望的目录中,并且它可能并非完全无关紧要...
    【解决方案2】:

    相当巧妙地使用了那里的文件系统。如果您保证 inode id 是唯一的,那么它是一种生成唯一编号的快速方法。我想知道这是否可以在 NFS 上始终如一地工作,因为显然不同的机器会有不同的 inode 编号。然后,您只需序列化您在那里创建的文件中的链接信息。

    为了稍微缩短 url,您可能会考虑区分大小写,并执行一种安全编码(您会从中得到大约 base62 - 10 [0-9] + 26 (a-z) + 26 ( A-Z),或者如果您删除一些“冲突”字母,例如I vs l vs 1... 有很多示例/库)。

    正如您所说,您还想用偏移量“归位”您的 id。您还需要弄清楚如何防止临时文件/日志文件等创建占用您的密钥空间。

    【讨论】:

      【解决方案3】:

      查看 Sean Inman 的 Lessn;还没玩过,但它是一个自托管滚动您自己的 URL 解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多