2013-09-29 16 views
7

के लिए php में यादृच्छिक स्ट्रिंग उत्पन्न करता है मैं फ़ाइल नामों के उपयोग के लिए पाठ की यादृच्छिक स्ट्रिंग बनाने के बारे में कैसे जाऊं?फ़ाइल नाम

मैं फोटो अपलोड कर रहा हूं और पूरा होने पर उनका नाम बदल रहा हूं। सभी तस्वीरें एक निर्देशिका में संग्रहीत करने जा रही हैं ताकि उनके फाइलनामों को अद्वितीय होना चाहिए।

क्या ऐसा करने का कोई मानक तरीका है?

क्या यह जांचने का कोई तरीका है कि फाइलनाम पहले से ओवरराइट करने का प्रयास करने से पहले मौजूद है या नहीं?

यह मेरी वेबसाइट पर मेरी व्यक्तिगत तस्वीरें दिखाने के लिए एक एकल उपयोगकर्ता वातावरण (स्वयं) के लिए है, हालांकि मैं इसे थोड़ा स्वचालित करना चाहता हूं। मुझे दो उपयोगकर्ताओं को एक ही समय में एक ही फ़ाइल नाम अपलोड करने और उत्पन्न करने की कोशिश करने की आवश्यकता नहीं है, लेकिन मैं यह जांचना चाहता हूं कि यह पहले से मौजूद है या नहीं।

मुझे पता है कि फ़ाइल को कैसे अपलोड करें, और मुझे याद है कि यादृच्छिक तार कैसे उत्पन्न करें, लेकिन मैं जानना चाहता हूं कि ऐसा करने का एक मानक तरीका है या नहीं।

+0

आप कुछ भी कोशिश की है? कृपया जो आपने किया है उसे पोस्ट करें। – SKJ

+0

देखें [यह सवाल] (http://stackoverflow.com/questions/4356289/php-random-string- जनरेटर) – TheWolf

+0

यादृच्छिक! = अद्वितीय। – David

उत्तर

21
function random_string($length) { 
    $key = ''; 
    $keys = array_merge(range(0, 9), range('a', 'z')); 

    for ($i = 0; $i < $length; $i++) { 
     $key .= $keys[array_rand($keys)]; 
    } 

    return $key; 
} 

echo random_string(50); 

उदाहरण आउटपुट:

zsd16xzv3jsytnp87tk7ygv73k8zmr0ekh6ly7mxaeyeh46oe8

संपादित

यहां कार्य करने के लिए, यह एक निर्देशिका में अद्वितीय को परिवर्तन:

function random_filename($length, $directory = '', $extension = '') 
{ 
    // default to this files directory if empty... 
    $dir = !empty($directory) && is_dir($directory) ? $directory : dirname(__FILE__); 

    do { 
     $key = ''; 
     $keys = array_merge(range(0, 9), range('a', 'z')); 

     for ($i = 0; $i < $length; $i++) { 
      $key .= $keys[array_rand($keys)]; 
     } 
    } while (file_exists($dir . '/' . $key . (!empty($extension) ? '.' . $extension : ''))); 

    return $key . (!empty($extension) ? '.' . $extension : ''); 
} 

// Checks in the directory of where this file is located. 
echo random_filename(50); 

// Checks in a user-supplied directory... 
echo random_filename(50, '/ServerRoot/mysite/myfiles'); 

// Checks in current directory of php file, with zip extension... 
echo random_filename(50, '', 'zip'); 
+0

धन्यवाद, यह वही है जो मैं बाद में था। मैंने इसे अतीत में किया है लेकिन यह सुनिश्चित नहीं था कि यह 'मजबूत' होगा। – Mike

+0

धन्यवाद, अगर यह काम करता है तो कृपया मेरा जवाब जांचें! – Domecraft

+0

मैंने सीधे जाने की कोशिश की लेकिन मुझे इसे कुछ मिनट छोड़ना पड़ा। यह अब किया गया है। – Mike

1

आशा यह क्या है आप देख रहे हैं: -

<?php 
function generateFileName() 
{ 
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789_"; 
$name = ""; 
for($i=0; $i<12; $i++) 
$name.= $chars[rand(0,strlen($chars))]; 
return $name; 
} 
//get a random name of the file here 
$fileName = generateName(); 
//what we need to do is scan the directory for existence of the current filename 
$files = scandir(dirname(__FILE__).'/images');//assumed images are stored in images directory of the current directory 
$temp = $fileName.'.'.$_FILES['assumed']['type'];//add extension to randomly generated image name 
for($i = 0; $i<count($files); $i++) 
    if($temp==$files[$i] && !is_dir($files[$i])) 
    { 
    $fileName .= "_1.".$_FILES['assumed']['type']; 
    break; 
    } 
unset($temp); 
unset($files); 
//now you can upload an image in the directory with a random unique file name as you required 
move_uploaded_file($_FILES['assumed']['tmp_name'],"images/".$fileName); 
unset($fileName); 
?> 
27

यह करने के लिए उचित तरीके से PHP के tempnam() समारोह का प्रयोग है। यह एक गारंटी अनूठा नाम के साथ निर्दिष्ट निर्देशिका में फ़ाइल बनाता है, तो आप अनियमितता या किसी मौजूदा फ़ाइल को अधिलेखित करने के बारे में चिंता करने की ज़रूरत नहीं है:

$filename = tempnam('/path/to/storage/directory', ''); 
unlink($filename); 
move_uploaded_file($_FILES['file']['tmp_name'], $filename); 
+0

डोमेक्राफ्ट के संयोजन के साथ मैं आपके कोड का उपयोग कैसे कर सकता हूं? मैं लंबे फाइल नाम रखना चाहता हूँ। – Mike

+3

आप यादृच्छिक स्ट्रिंग उत्पन्न करने के लिए @ डोमेक्राफ्ट के कोड का उपयोग कर सकते हैं, फिर इसे 'tempnam() 'के दूसरे तर्क के रूप में पास कर सकते हैं। इसके बाद फ़ाइल नाम से उपसर्ग किया जाएगा। –

+0

यह सच है, लेकिन आप इसे 'अनलिंक() 'आईएनजी द्वारा एक समस्या पेश करते हैं। यदि सुरक्षा के लिए अद्वितीय फ़ाइल नाम आवश्यक हैं, तो यह ठीक नहीं हो सकता है। – Douglas

संबंधित मुद्दे