私が取り組んでいるサイトは、tinyurl や bit.ly などのサードパーティに依存するのではなく、独自の短縮 URL を生成したいと考えています。
明らかに、新しい URL がサイトに追加されるたびに数え続け、それを使用して短い URL を生成することができます。しかし、これを機能させるだけでも大変な作業のように思えるので、可能であればそれを避けようとしています。
短い URL を必要とするものはすべて Web サーバー上の実際の物理ファイルであるため、現在の解決策は、それらの inode 番号を使用することです。これは、すぐに使用でき、一意であることが保証されているために既に生成されているためです。
function short_name($file) {
$ino = @fileinode($file);
$s = base_convert($ino, 10, 36);
return $s;
}
これはうまくいくようです。質問は、短縮 URL をさらに短くするにはどうすればよいですか?
これが使用されているシステムでは、新しく追加されたファイルの inode は、上記の関数が 7 文字の長さの文字列を返す範囲内にあります。
inode のビットの一部 (半分?) を安全に破棄できますか? もしそうなら、それは上位ビットですか、それとも下位ビットですか?
ファイル名に crc32 を使用することを考えましたが、実際には短い名前が inode を使用するよりも長くなります。
このようなものに衝突のリスクはありますか? 「$referencefile」の正しい値を選択することで、1 桁まで下げることができました。
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;
}