PHP

2011-09-28 1 views
5

में गैर अंग्रेजी निर्देशिकाएं बनाएं, मैं पंजीकृत उपयोगकर्ताओं के लिए उनके नामों के तहत फ़ोल्डर्स बनाने में सक्षम होना चाहता हूं। उनकी जानकारी को मेरे डीबी में सिरिलिक वर्णों में संग्रहीत किया जाता है और फ़ोल्डर बनाते समय खींच लिया जाता है। बात यह है कि अगर जानकारी अंग्रेजी में है तो सबकुछ ठीक है, अगर सिरिलिक में मुझे कुछ मिलता है जैसे РљСѓР »СЊС ‡ РјР ° РЅРѕРІР °। सब कुछ utf-8 पर सेट है। यदि मैं फ़ोल्डर नाम i.e 'фыва' पर सेट करता हूं तो यह कोई समस्या नहीं बनाता है।PHP

 $this->load->model('users_model'); 
    $i=$this->session->userdata('uid'); 
    $new_name=$this->input->post('doc_name'); 
    $folder=$this->users_model->getFullName($i); //$folder='фыва' works fine 

    if(!is_dir("./uploads/".$folder)){ 
     mkdir("./uploads/".$folder , 0777); 
    } 
    $config['file_name'] = $new_name; 
    $config['upload_path'] = './uploads/'.$folder.'/'; 

किसी भी मदद

+4

मैं वास्तव में आपको फ़ोल्डर नामों के लिए कुछ utf-8 स्ट्रिंग के बजाय यूआईडी का उपयोग करने का आग्रह करता हूं। – halfdan

+0

क्या कोडइग्निटर डेटाबेस मॉड्यूल MySQL में विभिन्न कॉलेशन को संभालता है? बहुआयामी सामग्री PHP में स्वचालित नहीं है, अगर यह ठीक से संभाल नहीं पाती है, तो यह ऐसी चीजें करेगा। – Orbling

+1

आप किस मंच पर हैं? विंडोज फ़ाइल नाम सम्मेलन विचित्र हो सकता है, और किसी भी प्लेटफार्म पर कोई मानक एन्कोडिंग नहीं है। – phihag

उत्तर

3

सराहना करेंगे मैं दृढ़ता से आप सर्वर, या और भी बेहतर पर केवल निर्देशिका नाम में सादे ASCII वर्ण का उपयोग करने की सलाह देते हैं : केवल नंबर, छोटे अक्षरों, और अंडरस्कोर। विशेष पात्रों का उपयोग करना हमेशा परेशानी लाता है, और ऐसा लगता है कि आपके पास पहले से ही कुछ हैं।

मेरा सुझाव है कि आप निर्देशिका को नामांकित उपयोगकर्ता आईडी (वे निश्चित रूप से एक हैं) के रूप में नाम दें, यदि आपको लगता है कि यह बेहतर दिखता है (सभी नामों की समान लंबाई है) तो शून्य के साथ पैडिंग।

+0

ठीक है मैं उपयोगकर्ता आईडी के साथ जाऊंगा ... लेकिन दस्तावेज़ नाम के बारे में क्या? उपयोगकर्ता दस्तावेज़ अपलोड करेगा और इसे फॉर्म में नाम देगा, इसलिए उसके फ़ोल्डर में मैं सहेजने के बाद दस्तावेज़ का नाम देखना चाहता हूं। (सिरिलिक में)। अगर मैं मैन्युअल रूप से नाम सेट करता हूं तो यह काम करता है, लेकिन फॉर्म – Alanagh

+0

से खींचने पर नहीं, आप फ़ाइल नामों को डीबी में भी स्टोर कर सकते हैं, अनिवार्य रूप से तीन कॉलम (उपयोगकर्ता आईडी, फाइलिड, फ़ाइल नाम) के साथ तालिका में ताकि आप वास्तविक को याद कर सकें डेटाबेस से नाम, और इसके बजाय फ़ाइल सिस्टम से फ़ाइल डेटा प्राप्त करें। मैं समझता हूं कि यह अजीब लग रहा है, लेकिन वास्तव में चीजें कैसे की जाती हैं। इसके बारे में सोचें: क्या होता है यदि उपयोगकर्ता किसी फ़ाइल के साथ एक फ़ाइल अपलोड करता है जो आपके सर्वर फ़ाइल सिस्टम द्वारा अधिकतम अधिकतम से अधिक है? या ऐसे नाम के साथ जिसमें '..' है, ताकि यदि आप इसे किसी पथ से जोड़ते हैं, तो यह आपकी निर्देशिका संरचना को वापस-नेविगेट कर सकता है? जांच करने के लिए बहुत अधिक सामान। – gd1

+0

अधिक, यदि फ़ाइलें पर्याप्त छोटी हैं (कुछ केबीएस) तो आप उन्हें बीएलओबी में स्टोर कर सकते हैं। हालांकि सावधान रहें, अगर दुर्व्यवहार किया जाता है तो यह आपके डीबी को डुबो सकता है। – gd1

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