php - 网址缩短 : using inode as short name?

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

最佳答案

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

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


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

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

  • Create short IDs with PHP - Like Youtube or TinyURL
  • Using Php and MySQL to create a short url service!
  • Building a URL Shortener

https://stackoverflow.com/questions/1323556/

相关文章:

php - 使用 CodeBird (PHP) 发布推文时使用短网址

dns - 如何获取我的网站的短网址?

short-url - 如何获得 goo.gl 分析?

google-app-engine - 使用 Google App Engine 生成带有实体键的短

php - 无法让 PHP 代码工作

url - 为什么在某些国家/地区拒绝使用短网址是这种犯罪?

asp.net - asp.net 2.0版本如何实现短网址

python - 如何从存档中获取原始 URL。是使用 python 的短链接?

c# - 字符串加密并缩短到更小的长度

short-url - 生成多个唯一的短网址?