我需要出售的圖片。我需要創建一個像系統一樣的megaupload來創建ramdom url,如下所示:「http://download.server.com/7fdfug87g89f7g98fd7g/image.jpg」與會話和IP地址相關聯。隨機URL像megaupload
我使用PHP,Apache或Nginx。
我該如何做到這一點?
任何想法?
我需要出售的圖片。我需要創建一個像系統一樣的megaupload來創建ramdom url,如下所示:「http://download.server.com/7fdfug87g89f7g98fd7g/image.jpg」與會話和IP地址相關聯。隨機URL像megaupload
我使用PHP,Apache或Nginx。
我該如何做到這一點?
任何想法?
使用一些常用的散列函數,例如MD5。應該有一個PHP模塊能夠做到這一點。
類似於md5的內容將在合理範圍內。
$my_seed = "something random here";
$path = md5($my_seed . $_SESSION['something'] . $_SERVER['REMOTE_ADDR']);
echo "http://download.server.com/" . $path . "/" . $file;
這應該會給你一個非常獨特的路徑來放置文件很難碰撞。你應該仍然檢查是否存在以前的散列路徑。
我通常使用像SHA1或MD5散列函數生成基於當前時間加上獨特無論網址是關於數據的一些其他位十六進制數字的僞隨機字符串。
在.htaccess
文件中使用mod_rewrite將符合您定義的某些模式的請求重定向到php文件'index.php'。
這樣您就可以將請求的字符串作爲URL參數傳遞給頁面。然後在腳本中,您可以使用該參數查找並返回相關圖像。
這就是所謂的「URL重寫」,並且是這些網站與有意義的URL是如何工作的方式,就像計算器的URL。
爲了唯一性;而不是純粹的哈希代碼,您可能需要保留一個數據庫以將代碼映射到文件。因此,它們可以是任意長度的完全隨機代碼,並且永遠不會相互衝突,因爲在分配過程中,如果您剛創建的那個與已經在數據庫中的另一個衝突相匹配,您將創建一個新的隨機數。您可以將清晰的IP和會話信息添加到數據庫記錄。這也消除了對散列算法進行一些繁重計算的需要。
當然。還有更多的工作要做。但MD5或其他哈希函數提供了一個很好的起點。確切的上傳日期和時間以及整個文件上的MD5可能會以一對一的方式編碼到最終文件名。哈希完成了一些不能輕易轉換回原始文件名的內容。 – Lagerbaer 2010-11-23 04:57:16