2010-11-23 38 views
5

我想讓我的用戶在他們的個人資料上上傳一個頭像。我的第一個想法是像這樣命名化身文件:[user_id] .jpg。所以,即使用戶更新其頭像,它也會保持相同的名稱。命名用戶頭像的最有效方法是?

問題是,如果我在服務器上使用緩存(或者即使它在客戶端上使用),新的頭像也不會顯示出來。

我的新的解決方案來命名這樣的文件:

[USER_ID] _ [隨機數] .jpg文件

,並存儲在用戶表中的隨機數。你如何以最有效的方式生成這個數字?或者也許有更好的解決方案?

+0

我假設`user_id`是一個數字? – 2010-11-23 11:46:22

+0

@ Grzegorz:是的,用戶表的實際ID。現在我看到人們建議不要公開顯示ID。 – Max 2010-11-23 12:24:51

回答

5

我會做這樣的事情:

$avatarName = $userId . uniqid(); 
// add extension if needed, store it 

這將是快,你想要做什麼。 uniqid()

編輯

至於建議由其他用戶,你應該從圖像名稱刪除用戶ID。擁有公共用戶ID可能會導致未來出現問題。 另外,uniqid()單獨應該工作。

$avatarName = uniqid(); 
// add extension if needed, store it 
7

當用戶上傳新的頭像時,您應該可以使緩存失效。

如果這是不可能的,你可以將它存儲爲[uid] _ [YYYYMMDDhhmmss] .jpg或其他東西。不需要隨機生成任何東西...

+1

除非你想隱藏其他用戶可能利用別人的uid的`uid`。 – 2010-11-23 11:45:38

+3

當然.. OP應該可能只使用uniqid()。 「.JPG」;然後將當前的頭像文件名存儲在用戶模型中。 – 2010-11-23 11:51:58

+0

@Jorge:我在我的應用程序的不同地方公開使用$ userId。是否有理由將其隱藏起來?所以如果我點擊你的個人資料,我會在URL中獲得一個ID:313194。這不是你的用戶名嗎?或者它是一個不同的領域? – Max 2010-11-23 12:28:26

1

你有沒有想過在你的.htaccess中配置ETags

參見:

http://developer.yahoo.com/blogs/ydn/posts/2007/07/high_performanc_11/

雖然可以更改文件名,則需要管理清理和指點操作(刪除/重命名舊文件,告訴你的應用程序中的新的文件)。如果您很樂意這樣做,您可以簡單地將用戶標識添加到上傳時的unix時間戳,但不太可能將相同的文件上傳到同一秒。如果你想使它更獨特,可以附加一個隨機數/ uniquid。

0

用隨機數有碰撞的極小(可忽略不計)的機會,但爲什麼在1無法啓動,只是每次增加的數量,因爲你存儲這個數字。

相關問題