我正在处理的网站想要生成自己的缩短网址,而不是依赖像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;
}
好点。 URI的一个关键方面是它们绝对不应该改变 - http://www.w3.org/Provider/Style/URI - 并且这违反了它。 – ceejayoz 2009-08-24 17:09:48
另一个风险是无意中允许访问您不希望允许的数据。例如,假设用户请求inode 17,并且恰好是/ etc/shadow(或者它们请求1111,这恰好是到/ etc/shadow的链接)。您必须进行额外的检查以确保文件位于您期望的目录中,并且这可能不是微不足道的... – atk 2009-08-24 17:29:02