我正在處理的網站想要生成自己的縮短網址,而不是依賴像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;
}
好點。 URI的一個關鍵方面是它們絕對不應該改變 - http://www.w3.org/Provider/Style/URI - 並且這違反了它。 – ceejayoz 2009-08-24 17:09:48
另一個風險是無意中允許訪問您不希望允許的數據。例如,假設用戶請求inode 17,並且恰好是/ etc/shadow(或者它們請求1111,這恰好是到/ etc/shadow的鏈接)。您必須進行額外的檢查以確保文件位於您期望的目錄中,並且這可能不是微不足道的... – atk 2009-08-24 17:29:02