私が取り組んでいるサイトでは、tinyurlやbit.lyのような第三者に依存するのではなく、独自の短縮URLを生成したいと考えています。URL短縮:短い名前としてinodeを使用していますか?
明らかに、サイトに追加された新しいURLを実行中のままカウントして、短いURLを生成するために使用することができます。しかし、私は可能な限りこのことを避けようとしています。なぜなら、この1つのことを動作させるだけの多くの仕事のように思われるからです。
短いURLを必要とするものはすべてウェブサーバ上の実際の物理ファイルです。私の現在の解決策は、使用の準備ができており、一意であることが保証されているようにiノード番号を使用することです。
function short_name($file) {
$ino = @fileinode($file);
$s = base_convert($ino, 10, 36);
return $s;
}
これは動作するようです。問題は、短いURLをさらに短くするために何ができるのでしょうか?
これが使用されているシステムでは、新しく追加されたファイルのinodeは、上記の関数が7文字の長さの文字列を返すような範囲にあります。
iノードのビットの半分を安全に捨てることはできますか?もしそうなら、それは高いビットか低いビットであるべきですか?
私はファイル名の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;
}
良い点。 URIの重要な側面の1つは、変更するべきではないことです - http://www.w3.org/Provider/Style/URI - これに違反します。 – ceejayoz
別のリスクは、意図しない許可を得ないデータへのアクセスを許可することです。たとえば、ユーザーがinode 17を要求し、/ etc/shadow(または1111が/ etc/shadowへのリンクであることを要求する)が発生したとします。ファイルが期待どおりのディレクトリにあることを確認するには、追加のチェックを行う必要がありますが、それは完全ではないかもしれません... – atk