我正在处理的网站希望生成自己的缩短 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;
}