2010年7月31日 星期六

uniqid() 生成一個獨特的ID

以往想使用PHP自動為檔案取檔名或是需要一段特殊不重複的字串,總是自己編一個計算規則,寫個自定函式來生成,當然計算方式不外乎就和時間、亂數有關。

在網路上發現有人在詢問類似的問題,才想要提供我的做法時,發現有人回答有函式可以使用,於是到PHP官網看了一下,發現還不錯用,就是 uniqid() 這個函式,官網說明很簡單明瞭,就是生成一個獨特的ID。



string uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] )
  • $prefix 前綴字串,可省略。
  • $more_entropy 在此應該是代表更多資訊量,原本預設 false 所產生的ID只有13個字元,但如果設定為 true,將會在原本ID後方添加小數點及後面字串使整個ID達到 23 個字元,這樣該ID就會更加獨特。
  • 回傳字串。
這個函式是使用當前時間的微秒來產生獨特ID字串,如果使用環境是類似多台 Web Server 產生獨特ID寫到單一台 DB Server ,單單使用 uniqid() 來產生名稱,在競爭的情況下,還是有可能會有名稱相同的情形產生,這時候可以多利用函式的兩個參數和配合亂數使用,將會更有效澼免名稱相同。

話雖如此,我在本機使用 uniqid(uniqid()) 這樣子查看結果,因為是使用微秒產生的,前後兩段並不會相同,又再試試別的方式測試,沒測試出重複的情形;所以,使用這個函式在單機上使用,可說是不用擔心名稱重複的問題。