2010-04-21 18 views
6

में विशेष वर्ण मैं विशेष वर्ण (स्वीडिश अक्षरों åäö) का उपयोग करता हूं।"file_exists" समस्या (php)

अब, मेरे पास कुछ फ़ोल्डर्स हैं, जिनमें वर्गीकरण के लिए छवियां हैं। फ़ोल्डरों को श्रेणी के आधार पर नामित किया गया है।

for ($i=1; $i<=5; $i++){ 
    if (file_exists($big_images.$i.'.jpg')){ echo "Inne"; 
     unlink($big_images.$i.'.jpg'); 
    } 
    if (file_exists($thumb_images.$i.'.jpg')){ 
     unlink($thumb_images.$i.'.jpg'); 
     } 
    } 

मैं अपनी साइट पर 5 छवियों की अनुमति देता हूं, प्रत्येक एक एनआर 1-5 के साथ समाप्त होता है। हालांकि, मेरी समस्या यह है, जब भी फ़ोल्डर-नाम का एक विशेष चरित्र होता है, file_exists झूठी रिटर्न देता है, यानी यह फ़ाइल नहीं ढूंढता है। भले ही यह वहां है।

सभी दस्तावेज utf-8 प्रारूप में हैं।

यह तब काम करता है जब फ़ोल्डर नामों में कोई विशेष वर्ण नहीं होता है।

आप अधिक इनपुट की जरूरत है मुझे पता है

+0

आप किस ओएस का उपयोग कर रहे हैं? स्थानीय मशीन पर – zaf

+0

wampserver, विंडोज़ –

उत्तर

22

सर्वर ओएस क्या है है?

यदि यह विंडोज है, तो आप यूटीएफ -8-एन्कोडेड फ़ाइल नाम के तहत फ़ाइलों तक पहुंच नहीं पाएंगे, क्योंकि PHP द्वारा उपयोग किए गए सी आईओ पुस्तकालयों के विंडोज कार्यान्वयन केवल सिस्टम डिफ़ॉल्ट कोड पृष्ठ में बात करेंगे। पश्चिमी यूरोपीय इंस्टॉल किए जाने के लिए, कि कोड पेज 1252. है आप iconv का उपयोग कर cp1252 करने के लिए एक UTF-8 स्ट्रिंग परिवर्तित कर सकते हैं:

$winfilename= iconv('utf-8', 'cp1252', $utffilename); 

(utf8_decode भी इस्तेमाल किया जा सकता है, लेकिन यह विंडोज के विस्तार अक्षर हैं जो नक्शा के लिए गलत परिणाम देना होगा cp1252 में 0x80-0x9F की सीमा तक।)

फ़ाइलें जिनके नाम सिस्टम कोडपेज (जैसे पश्चिमी बॉक्स पर ग्रीक) के प्रदर्शन के बाहर वर्ण शामिल हैं, को PHP और अन्य प्रोग्रामों द्वारा stdio का उपयोग करके एक्सेस नहीं किया जा सकता है। ऐसी स्क्रिप्टिंग भाषाएं हैं जो Win32 एपीआई के माध्यम से देशी-यूनिकोड फ़ाइल नामों का उपयोग कर सकती हैं, लेकिन PHP5 उनमें से एक नहीं है।

और निश्चित रूप से उपर्युक्त चरण का उपयोग तब नहीं किया जाना चाहिए जब एक अलग ओएस पर तैनात किया गया हो जहां फाइल सिस्टम यूटीएफ -8-एन्कोडेड है। (यानी आधुनिक लिनक्स।)

यदि आपको PHP के साथ सहजता से पार-सर्वर-संगत करने की आवश्यकता है, तो आपको फ़ाइल नामों में गैर-ASCII वर्णों का उपयोग करने से बचना होगा। माफ़ कीजिये।

+0

मुझे इस समस्या का सामना करना पड़ रहा है कि, सिस्टम की आवश्यकता के कारण, * विंडोज मशीन पर * होस्ट किया जाना चाहिए, और * उन फ़ाइलों के साथ संघर्ष करना चाहिए जिनमें 1252 कोडपेज के बाहर वर्ण हैं । मैंने पाया है कि 'DirectoryIterator' और' SplFileInfo' लाइब्रेरी इन फ़ाइलों के साथ संवाद करने में सक्षम हैं। 'iconv' अमान्य वर्णों के बारे में चेतावनियां फेंकता है, और 'file_exists' कई परिस्थितियों में विफल हो जाएगा। मुझे ट्रैक पर लाने के लिए मुझे +1 करें जो अंततः हमारे अर्ध-माप समाधान का कारण बनता है, और फिर ध्यान दें कि 'SplFileInfo' एक अधिक सार्वभौमिक समाधान प्रतीत होता है। –

+0

वैकल्पिक रूप से आपके फ़ाइल नामों में विशेष वर्णों को बदलने वाले यूआरएल चरित्र एक अच्छा समाधान हो सकता है। – user544262772

+0

पर्याप्त जोर नहीं दे सकता: "** ... यदि आपको PHP के साथ सहजता से क्रॉस-सर्वर-संगत होने की आवश्यकता है, तो आपको फ़ाइल नामों में गैर-ASCII वर्णों का उपयोग करने से बचना होगा ... **" –

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