2012-10-01 11 views
5

के लिए एक स्ट्रिंग की जांच करें मुझे एक फ़ंक्शन, मूल या उपयोगकर्ता की आवश्यकता है, जो जांचता है कि कोई स्ट्रिंग मान्य निर्देशिका नाम है या नहीं। मैंने PHP दस्तावेज़ों को देखा है और मुझे केवल is_dir फ़ंक्शन मिल सकता है जो जांचता है कि यह मौजूदा निर्देशिका है या नहीं, निर्देशिका के लिए मान्य नाम है या नहीं।मान्य निर्देशिका नाम

+3

"वैध निर्देशिका नाम" परिभाषित करें प्रत्येक ओएस के अपने स्वयं के प्रतिबंध हैं। परिभाषित करें कि कानूनी क्या है और नहीं, और फिर उसके खिलाफ मान्य करें। –

+0

एक निर्देशिका जो मौजूद नहीं है एक अवैध निर्देशिका होगी, नहीं? –

+0

आप 'सामान्य' निर्देशिका regex के लिए खोज सकते हैं .. – Darkwater

उत्तर

7

यह आपके लिए काम करना चाहिए।

regex for validating folder name & file name

if (strpbrk($filename, "\\/?%*:|\"<>") === FALSE) { 
    /* $filename is legal; doesn't contain illegal character. */ 
} 
else { 
    /* $filename contains at least one illegal character. */ 
} 
4

यह काम कर सकेगा। आप अपनी जरूरतों के लिए दूसरे और तीसरे तर्क को संशोधित कर सकते हैं।

if (!mkdir($directory, 0700, true)) { 
    die('Error: Illegal directory.'); 
} 

ध्यान दें कि निर्देशिका नाम मान्य होने पर यह निर्देशिका बना देगा। हालांकि, मेरी विनम्र राय में (और आपके विशेष उपयोग मामले को जानने के बिना), अधिकांश भाषाओं में चेकिंग निर्देशिका नाम वैधता को संभालने के लिए यह पसंदीदा तरीका है। बस निर्देशिका बनाने का प्रयास करें, और यदि यह विफल हो जाता है, तो उन्हें बताएं कि यह विफल रहा है।

इसका लाभ यह है कि यह आपके कोड फ़ाइल सिस्टम अज्ञेयवादी रखता है और यह निर्देशिका को सत्यापित करने और बनाने के लिए कम से कम त्रुटि-प्रवण विधि है, क्योंकि कोई अन्य प्रक्रिया या धागा मान्य होने पर एक निर्देशिका बनाने में सक्षम नहीं होगा निर्देशिका और जब आप इसे बनाते हैं।

दोष यह है कि यह विधि मानती है कि आप तुरंत निर्देशिका बनाना चाहते हैं।

बेशक, कई कारण हैं कि mkdir() विफल हो सकता है (उदा। अपर्याप्त अनुमतियां, हार्डवेयर विफलता, अमान्य निर्देशिका नाम इत्यादि), ताकि आप त्रुटि के आधार पर उपयोगकर्ता को विभिन्न त्रुटि संदेश प्रदर्शित करना चाहें। दुर्भाग्यवश, PHP में कुछ अन्य भाषाओं के रूप में मजबूत अपवाद हैंडलिंग नहीं है, लेकिन क्या आप इस सड़क पर जाना चाहते हैं, तो mkdir() उत्पन्न होने वाली विभिन्न चेतावनियों को पकड़ने के लिए आपको इस answer जैसे दृष्टिकोण का उपयोग करने में सक्षम होना चाहिए।

+0

शायद आपको यह कोशिश करनी चाहिए: 'mkdir (' dirname/test /../ temp ', 0700, true);' निश्चित रूप से 'gregoryBurns उनके उत्तर में सुझाए गए कुछ चीज़ों के लिए '$ निर्देशिका' नाम फ़िल्टर करने के लिए उपयोगी हो सकता है ... – Wilt

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