2009-08-24 90 views
0

我正在處理的網站想要生成自己的縮短網址,而不是依賴像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; 
} 

回答

13

不知道這是一個好主意:如果你要改變服務器,或更改磁盤/重新格式化,文件的索引節點號將很可能改變......而所有的短網址將被打破/ 丟失 !如果

同樣的事情,因爲任何原因,您需要將您的文件移動到硬盤的其他分區,順便說一句。


另一個想法可能是計算一些crc/md5 /無論文件的名稱,如你所建議的,並使用一些算法來「縮短」它。

以下是關於一對夫婦的文章:

+2

好點。 URI的一個關鍵方面是它們絕對不應該改變 - http://www.w3.org/Provider/Style/URI - 並且這違反了它。 – ceejayoz 2009-08-24 17:09:48

+1

另一個風險是無意中允許訪問您不希望允許的數據。例如,假設用戶請求inode 17,並且恰好是/ etc/shadow(或者它們請求1111,這恰好是到/ etc/shadow的鏈接)。您必須進行額外的檢查以確保文件位於您期望的目錄中,並且這可能不是微不足道的... – atk 2009-08-24 17:29:02

0

退房Lessn由肖恩·英曼;還沒有玩過,但它是一個自行託管的自己的URL解決方案。

2

相當聰明地使用那裏的文件系統。如果您確定inode id獨一無二,那麼可以快速生成唯一編號。我想知道這是否可以在NFS上一致地工作,因爲顯然不同的機器會有不同的inode編號。然後,您只需在您創建的文件中序列化鏈接信息。你可能會考慮區分大小寫,並做一個安全的編碼(你會得到大約base62 - 10 [0-9] + 26(az)+ 26 (AZ),或者更少,如果你刪除了一些'衝突'字母,如I vs l vs 1 ...有大量的例子/庫在那裏)。

你也想像你說的那樣用偏移量「迴歸」你的ID。你還需要弄清楚如何保持臨時文件/日誌文件等的創建吃掉你的密鑰空間。