2009-09-19 17 views
13

मैं एक सिस्टम में छवियों को अपलोड करने जा रहा हूं और उन्हें गैर अनुक्रमिक अद्वितीय आईडी द्वारा संदर्भित करने की आवश्यकता है। मैंने GUID के बारे में कुछ पढ़ा है, और मैं सोच रहा हूं कि PHP में एक बनाने का सबसे अच्छा तरीका क्या है। क्या मुझे वर्तमान टाइमस्टैम्प md5() चाहिए और इसे नमक, या PHP के अद्वितीय (http://www.php.net/manual/en/function.uniqid.php) फ़ंक्शन पर्याप्त पर्याप्त होगा?मुझे अपना GUID कैसे बनाना चाहिए?

धन्यवाद!

उत्तर

19

संपादित करें:

ओह! मैं अपने इस प्राचीन उत्तर के बारे में भूल गया। मेरे naivety द्वारा बनाई गई भ्रम को स्पष्ट करने के लिए (नीचे दी गई टिप्पणियों के अनुरूप): MD5 (उनकी प्रकृति द्वारा सबसे उपयोगी हैश की तरह) इंजेक्शन नहीं है, इसलिए उनके आउटपुट को सभी इनपुट के लिए अद्वितीय होने की गारंटी नहीं है।

यदि हैश टकराव एक मुद्दा है (इस मामले में, वे हैं), इस तकनीक का उपयोग करने के लिए जांच करने की आवश्यकता होगी, हैशिंग के बाद, क्या एक समान कुंजी पहले ही उत्पन्न हो चुकी है।


uniqid के बाद से GUID उत्पन्न करने के लिए माइक्रोसेकंड में वर्तमान समय का उपयोग करता है, कोई मौका नहीं क्या तुमने कभी दो बार एक ही एक में चलाने जाएगा लगभग होती है।

तो यदि आप अद्वितीय फ़ाइल नाम बनाने के लिए इसका उपयोग कर रहे हैं, तो uniqid() पर्याप्त होगा। यदि आप उपयोगकर्ताओं को गइड अनुमान लगाने से रोकना चाहते हैं, तो आप इसे कठिन और एमडी 5 भी कर सकते हैं।

+1

मैं :) –

+4

लेकिन MD5 नहीं करता है यह md5'ing का विचार पसंद के लिए विशिष्टता को संरक्षित नहीं करते हैं। – Gumbo

+2

यदि आप एक कुंजी जो md5 पहले से ही अद्वितीय है, तो यह अद्वितीय रहेगा। – BraedenP

6

GUID माइक्रोसॉफ्ट का यूयूआईडी का संस्करण है। PHP का यूनिकिड यूयूआईडी का संस्करण 4 है। निश्चित रूप से पर्याप्त अच्छा है।

2

मैं भी .net एपीआई बुला और इस समारोह GUID प्रारूप में एक कुंजी उत्पन्न करने के लिए GUID बनाने के लिए चाहते हैं और यह काम करता मुझे

function generateGuid($include_braces = false) { 
    if (function_exists('com_create_guid')) { 
     if ($include_braces === true) { 
      return com_create_guid(); 
     } else { 
      return substr(com_create_guid(), 1, 36); 
     } 
    } else { 
     mt_srand((double) microtime() * 10000); 
     $charid = strtoupper(md5(uniqid(rand(), true))); 

     $guid = substr($charid, 0, 8) . '-' . 
       substr($charid, 8, 4) . '-' . 
       substr($charid, 12, 4) . '-' . 
       substr($charid, 16, 4) . '-' . 
       substr($charid, 20, 12); 

     if ($include_braces) { 
      $guid = '{' . $guid . '}'; 
     } 

     return $guid; 
    } 
} 
संबंधित मुद्दे