2013-03-20 6 views
6

मैं वर्तमान में फोनगैप की सहायता से मोबाइल ऐप लिखने की प्रक्रिया में हूं। कुछ विशेषताओं में से एक जो मैं इस ऐप को प्राप्त करना चाहता हूं वह एक छवि को कैप्चर करने और इसे दूरस्थ सर्वर पर अपलोड करने की क्षमता है ...अनन्य फ़ाइल नामों का उपयोग करके PHP के माध्यम से छवियों को अपलोड करें

मेरे पास वर्तमान में छवि कैप्चरिंग और अपलोडिंग/ईमेलिंग भाग संकलित के साथ ठीक काम कर रहा है एपीके ... लेकिन मेरे PHP में, मैं वर्तमान में छवियों का नामकरण कर रहा हूं "छवि [10 से 20 तक यादृच्छिक संख्या डालें] ... यहां समस्या यह है कि संख्याओं को दोहराया जा सकता है और छवियों को ओवरराइट किया जा सकता है ... मेरे पास है रैंड() का उपयोग करने और 0 से getrandmax() से यादृच्छिक संख्या का चयन करने के बारे में पढ़ें और सोचा, लेकिन मुझे लगता है कि मेरे पास फ़ाइल ओवरराइटिंग का एक ही मौका हो सकता है ... मुझे सर्वर पर अपलोड करने के लिए छवि की आवश्यकता है अद्वितीय नाम हर बार, इससे कोई फर्क नहीं पड़ता कि ... php स्क्रिप्ट यह देखने के लिए जांच करेगी कि सर्वर के पास पहले से क्या है और एक अद्वितीय नाम के साथ छवि को लिखें/अपलोड करें ...

"रैंड()" के अलावा कोई अन्य विचार?

मैं शायद प्रत्येक छवि का नामकरण करने के बारे में भी सोच रहा था ... img + date + time + random 5 अक्षर, जिसमें अक्षरों और संख्याएं शामिल होंगी ... इसलिए अगर किसी छवि को 4:37 बजे ऐप का उपयोग करके लिया गया था 20 मार्च, 2013 को, सर्वर पर अपलोड होने पर छवि को "img_03-20-13_4-37am_e4r29.jpg" जैसे कुछ नाम दिया जाएगा ... मुझे लगता है कि यह काम कर सकता है ... (जब तक कि एक बेहतर तरीका नहीं है) लेकिन मैं काफी हद तक हूं php के लिए नए और समझ में नहीं आता कि कैसे ऐसा ही कुछ लिखने के लिए ...

मेरी php के रूप में इस प्रकार है ...

print_r($_FILES); 
$new_image_name = "image".rand(10, 20).".jpg"; 
move_uploaded_file($_FILES["file"]["tmp_name"], "/home/virtual/domain.com/public_html/upload/".$new_image_name); 

किसी भी मदद की सराहना की है ... धन्यवाद अग्रिम रूप से! इसके अलावा, अगर मुझे कोई और जानकारी मिल रही है तो मुझे बताएं ...

+0

'$ new_image_name = "image" .microtime()। "jpg"; 'आपकी ज़रूरतों के लिए पर्याप्त होना चाहिए अगर 2 छवियों को एक ही समय में संसाधित नहीं किया जाता है (दूसरे का अंश)। – Waygood

उत्तर

16

आप PHP के uniqid() समारोह पर विचार करना चाहते हो सकता है:

इसके अलावा यहां एक और तरीका है। इस तरह कोड आप सुझाव निम्नलिखित दिखाई देगा:

$new_image_name = 'image_' . date('Y-m-d-H-i-s') . '_' . uniqid() . '.jpg'; 
// do some checks to make sure the file you have is an image and if you can trust it 
move_uploaded_file($_FILES["file"]["tmp_name"], "/home/virtual/domain.com/public_html/upload/".$new_image_name); 

भी ध्यान रखें कि आपके सर्वर के यादृच्छिक कार्यों वास्तव में यादृच्छिक नहीं हैं में रहते हैं। अगर आपको वास्तव में यादृच्छिक कुछ चाहिए तो random.org आज़माएं। रैंडम यादृच्छिक यादृच्छिक।

यूपीडी: अपने कोड के भीतर random.org का उपयोग करने के लिए, आपको अपने सर्वर पर कुछ एपीआई अनुरोध करना होगा। उस पर प्रलेखन यहां उपलब्ध है: www.random.org/clients/http/

कॉल का उदाहरण होगा: random.org/integers/?num=1&min=1&max=1000000000&col=1&base=10&format=plain&rnd=new। ध्यान दें कि documentation में वर्णित अनुसार आप min, max और अन्य पैरामीटर बदल सकते हैं।

PHP में आप file_get_contents() फ़ंक्शन, cURL लाइब्रेरी या यहां तक ​​कि सॉकेट का उपयोग कर रिमोट सर्वर से अनुरोध कर सकते हैं। यदि आप साझा होस्टिंग का उपयोग कर रहे हैं, तो आउटगोइंग कनेक्शन आपके खाते के लिए उपलब्ध और सक्षम होना चाहिए।

$random_int = file_get_contents('http://www.random.org/integers/?num=1&min=1&max=1000000000&col=1&base=10&format=plain&rnd=new'); 
var_dump($random_int); 
+0

+1 अच्छी तरह से किया गया। "माइक्रोसॉन्ड में वर्तमान समय के आधार पर" – Waygood

+0

यह वास्तव में अच्छा काम करता प्रतीत होता है, लेकिन मैं random.org को कैसे एकीकृत करूं? मुझे निश्चित रूप से सही यादृच्छिकता में रुचि है – JStormThaKid

1

क्या आपने md5_file का उपयोग करने पर विचार किया है? इस तरह आपकी सभी फाइलों का अनूठा नाम होगा और आपको डुप्लिकेट नामों के बारे में चिंता करने की आवश्यकता नहीं होगी। लेकिन कृपया ध्यान दें कि यदि सामग्रियां समान हैं तो यह वही स्ट्रिंग वापस कर देगा।

do { 
    $filename = DIR_UPLOAD_PATH . '/' . make_string(10) . '-' . make_string(10) . '-' . make_string(10) . '-' . make_string(10); 
} while(is_file($filename)); 

return $filename; 

/** 
* Make random string 
* 
* @param integer $length 
* @param string $allowed_chars 
* @return string 
*/ 
function make_string($length = 10, $allowed_chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890') { 
    $allowed_chars_len = strlen($allowed_chars); 

    if($allowed_chars_len == 1) { 
    return str_pad('', $length, $allowed_chars); 
    } else { 
    $result = ''; 

    while(strlen($result) < $length) { 
     $result .= substr($allowed_chars, rand(0, $allowed_chars_len), 1); 
    } // while 

    return $result; 
    } // if 
} // make_string 
+0

क्या होगा यदि उन्हें वही कहा जाता है? md5_file ('image.jpg') === md5_file ('image.jpg') – Waygood

+0

या शायद मैं एक साथ "छवि" से छुटकारा पा सकता हूं? print_r ($ _ FILES) जैसे कुछ करें; $ new_image_name = md5()। "Jpg"; move_uploaded_file ($ _ FILES ["file"] ["tmp_name"], "/home/virtual/domain.com/public_html/upload/".$new_image_name); – JStormThaKid

+0

क्या यह काम करेगा? – JStormThaKid

-1

फ़ंक्शन छवि अपलोड करने से पहले एक अद्वितीय नाम बनाएगा।

// Upload file with unique name 
if (! function_exists('getUniqueFilename')) 
{ 
    function getUniqueFilename($file) 
    { 
     if(is_array($file) and $file['name'] != '') 
     { 
      // getting file extension 
      $fnarr   = explode(".", $file['name']); 
      $file_extension = strtolower($fnarr[count($fnarr)-1]); 

      // getting unique file name 
      $file_name = substr(md5($file['name'].time()), 5, 15).".".$file_extension; 
      return $file_name; 

     } // ends for is_array check 
     else 
     { 
      return ''; 

     } // else ends 

    } // ends 
} 
+0

अन्य उत्तर के साथ, यादृच्छिक! = अद्वितीय। –

+0

इसके अलावा, एक ही सेकंड में दो अपलोड निश्चित रूप से एक मुद्दा का कारण बनेंगे। –

+0

FYI: यह उत्तर http://stackoverflow.com/questions/24255676/image-upload-with-diffrent-name – Shog9

5

आप tempnam() का उपयोग करना चाहिए एक अनूठा फ़ाइल नाम उत्पन्न करने के लिए:

// $baseDirectory Defines where the uploaded file will go to 
// $prefix   The first part of your file name, e.g. "image" 
$destinationFileName = tempnam($baseDirectory, $prefix); 

अपनी नई फ़ाइल के विस्तार अपलोड की गई फ़ाइल जाने के बाद किया जाना चाहिए, अर्थात्:

// Assuming $_FILES['file']['error'] == 0 (no errors) 
if (move_uploaded_file($_FILES['file']['tmp_name'], $destinationFileName)) { 
    // use extension from uploaded file 
    $fileExtension = '.' . pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); 
    // or fix the extension yourself 
    // $fileExtension = ".jpg"; 
    rename($destinationFileName, $destinationFileName . $fileExtension); 
} else { 
    // tempnam() created a new file, but moving the uploaded file failed 
    unlink($destinationFileName); // remove temporary file 
} 
+0

से बना हुआ था। टीएमपी फाइल – user3726268

+0

@ user3726268 आप विस्तार को बदलने के लिए बाद में नाम बदल सकते हैं (या इसे पूरी तरह हटा दें)। –

+0

@ user3726268 बीटीडब्ल्यू, 'tempnam()' एकमात्र दृष्टिकोण है जो गारंटी देगा कि नया फ़ाइल नाम अद्वितीय होगा (केवल यादृच्छिक के बजाय)। –

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

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