PHP

2012-03-23 5 views
17

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

जो मैं करने की योजना बना रहा हूं वह यह है कि move_uploaded_file कमांड का उपयोग करने से पहले यह सामान्य वर्णों के साथ विशेष वर्णों को बदलना/preg_replace करना संभव है, ताकि फ़ाइल को अपलोड किया जा सके और नए नाम से संग्रहीत किया जा सके जिसमें केवल सामान्य वर्ण हों।

+0

यह संभव है हाँ। आपने क्या प्रयास किया है –

उत्तर

26
// Get the original file name from $_FILES 
$file_name= $_FILES['file']['name']; 

// Remove any characters you don't want 
// The below code will remove anything that is not a-z, 0-9 or a dot. 
$file_name = preg_replace("/[^a-zA-Z0-9.]/", "", $file_name); 

// Get the location of the folder to upload into 
$location = 'path/to/dir/'; 

// Use move_uploaded_file() 
move_uploaded_file($_FILES["file"]["tmp_name"], $location.$file_name); 
+0

@ 472084, आपने ज़िप फ़ाइल में और उप निर्देशिकाओं या फ़ाइलों के तहत विशेष वर्णों के साथ मेरी इतनी लंबी समस्या हल की है। महान। :) – NullPointer

+1

यह बहुत अच्छा काम करता है, लेकिन आपको फ़ाइल एक्सटेंशन के लिए भी डॉट जोड़ना होगा। $ file_name = preg_replace ("/ [^ a-zA-Z0-9।] /", "", $ File_name); –

+0

यह काम करता है लेकिन पथ स्थान – jned29

0

आप $_FILES से एक अपलोड की गई फ़ाइल के लिए मूल फ़ाइल नाम प्राप्त कर सकते हैं, और आप अपने "विशेष" संस्करण बना सकते हैं इसमें strtr (जो इस मामले के लिए सबसे अच्छा मिलान है) के साथ वर्णों को प्रतिस्थापित करके, str_replace, preg_replace या कोई अन्य स्ट्रिंग प्रोसेसिंग फ़ंक्शन।

सबसे अच्छा तरीका बिल्कुल पर निर्भर करता है जो आप करना चाहते हैं।

0

आप इस तरह यह कर सकता है, एक साधारण समारोह strip_special_chars() एक स्ट्रिंग में वर्णों आप चाहते हैं बदलने के लिए लिखने

$tmp_name = $_FILES["file"]["tmp_name"]; 
$name = strip_special_chars($tmp_name); 
move_uploaded_file($name, "path/to/dir/"); 
+0

आपके उत्तरों और उदाहरण कोड के लिए धन्यवाद दोस्तों, इसे हल किया – 125369

0

इसके अलावा, आप इस तरह विशेष वर्ण के लिए एक समारोह का उपयोग कर सकते हैं:

function safename($theValue) 
{ 
    $_trSpec = array(
     'Ç' => 'C', 
     'Ğ' => 'G', 
     'İ' => 'I', 
     'Ö' => 'O', 
     'Ş' => 'S', 
     'Ü' => 'U', 
     'ç' => 'c', 
     'ğ' => 'g', 
     'ı' => 'i', 
     'i' => 'i', 
     'ö' => 'o', 
     'ş' => 's', 
     'ü' => 'u', 
    ); 
    $enChars = array_values($_trSpec); 
    $trChars = array_keys($_trSpec); 
    $theValue = str_replace($trChars, $enChars, $theValue); 
    $theValue=preg_replace("@[^A-Za-z0-9\-_.\/][email protected]","-",$theValue); 
    $theValue=strtolower($theValue); 
    return $theValue; 
} 

अनुमति के बारे में सावधान रहें। फ़ाइल एक्सटेंशन के लिए।

और फिर, अपने मूल अस्थायी फ़ाइल का नाम बदलने के

$tempFile = $_FILES['Filedata']['tmp_name']; 
$targetFile = safename($targetFile); 

$location = 'path/to/dir/'; 
move_uploaded_file($_FILES["file"]["tmp_name"], $location.$targetFile); 
संबंधित मुद्दे