2009-08-24 20 views
0

私が取り組んでいるサイトでは、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; 
} 

答えて

13

ない、これは良い考えであることを確認:あなたはそれを再フォーマット/サーバーを変更する、またはディスクを変更する必要があれば、あなたのファイルのiノードの番号は、おそらく変更されます...そして、すべてのあなたの短いURLが壊れてしまいます/失われた!

何らかの理由でファイルをディスクの別のパーティションbtwに移動する必要がある場合も同じです。
もう1つの考え方は、あなたが提案したように、ファイルの名前の何らかのcrc/md5 /を計算し、それを「短縮」するアルゴリズムを使用することです。ここで

が、そのことについてのカップルの記事です:

+2

良い点。 URIの重要な側面の1つは、変更するべきではないことです - http://www.w3.org/Provider/Style/URI - これに違反します。 – ceejayoz

+1

別のリスクは、意図しない許可を得ないデータへのアクセスを許可することです。たとえば、ユーザーがinode 17を要求し、/ etc/shadow(または1111が/ etc/shadowへのリンクであることを要求する)が発生したとします。ファイルが期待どおりのディレクトリにあることを確認するには、追加のチェックを行う必要がありますが、それは完全ではないかもしれません... – atk

0

ショーン・インマンによってチェックアウトLessn。まだそれを再生していないが、それはあなた自身のURLソリューションを自己ホストロールです。

2

そこにファイルシステムを使いこなす。 iノードIDがユニークであることが保証されていれば、ユニークな数を簡単に生成することができます。明らかに異なるマシンは異なるinode番号を持つため、これがNFS上で一貫して動作するかどうかは疑問です。次に、作成したファイル内のリンク情報をシリアライズします。

URLを少し短くするには、大文字と小文字の区別を考慮し、安全なエンコーディングの1つを実行します(10〜0-9〜26(az)+ 26あなたがいくつかの '紛争'の文字を削除した場合は、Il1 ...そこに多くの例/ライブラリがあります。

あなたは、あなたが言ったようにオフセットを使ってあなたのIDを「ホーム」したいと思うでしょう。また、テンポラリファイル/ログファイルなどの作成をキースペースを食い止めないようにする方法を理解する必要があります。

関連する問題