PHP में फ़ोल्डर बनाएँ यदि वह मौजूद नहीं है: 2025 के 5 सर्वश्रेष्ठ तरीके

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

PHP में फ़ोल्डर बनाएँ यदि वह मौजूद नहीं है: एक प्रश्न का विकास

\n\n

यदि आपने कभी कोई स्क्रिप्ट लिखी है जो फ़ाइलें अपलोड करती है, कैश सहेजती है या रिपोर्ट जनरेट करती है, तो आपने निश्चित रूप से ऐसी स्थिति का सामना किया होगा: "फ़ोल्डर ही नहीं है!"। एक त्रुटि जो पूरी स्क्रिप्ट को तोड़ देती है, और उपयोगकर्ता को एक सफेद स्क्रीन या (इससे भी बदतर) एक समझ से बाहर PHP त्रुटि दिखाई देती है।

\n\n

Stack Overflow पर "Create a folder if it doesn't already exist" प्रश्न हज़ारों बार देखा जाता है। और यह उचित भी है। इसमें मुश्किल क्या हो सकती है? लेकिन शैतान, हमेशा की तरह, विवरणों में है: अनुमतियाँ, रिकर्सन, अपवाद प्रबंधन, फ़ोल्डर नाम एन्कोडिंग। 2025 में, जब प्रोजेक्ट अधिक जटिल होते जा रहे हैं और सुरक्षा आवश्यकताएँ सख्त होती जा रही हैं, डायरेक्ट्री का सही निर्माण एक मूलभूत बात है जो प्रत्येक PHP डेवलपर को पता होनी चाहिए।

\n\n

इस लेख में, हम PHP में फ़ोल्डर बनाने की 5 सर्वश्रेष्ठ प्रथाओं पर चर्चा करेंगे, यदि वह मौजूद नहीं है। शुरुआती लोगों के लिए सरल समाधान से लेकर race condition से सुरक्षित औद्योगिक कोड तक। चलिए शुरू करते हैं!

\n\n

केवल mkdir() खराब क्यों है? (एक त्रुटि की कहानी)

\n\n

शुरुआत में, कई लोग ऐसा लिखते हैं:

\n\n
<?php\nmkdir('/path/to/my/folder');\n?>
\n\n

और उन्हें मिलता है:

\n\n
    \n
  • Warning: mkdir(): No such file or directory — यदि पैरेंट फ़ोल्डर मौजूद नहीं है।
  • \n
  • Warning: mkdir(): File exists — यदि फ़ोल्डर पहले से मौजूद है।
  • \n
\n\n

ये दोनों चेतावनियाँ केवल "पीला टेक्स्ट" नहीं हैं। production मोड में, यदि त्रुटि रिपोर्टिंग का सख्त मोड चालू है, तो ये घातक त्रुटियों में बदल सकती हैं। और यह सुरक्षा में एक छेद भी है: एक हमलावर आपकी स्क्रिप्ट से पहले उसी नाम का फ़ोल्डर बना सकता है (race condition)।

\n\n

इसलिए आधुनिक दृष्टिकोण हमेशा जाँच, रिकर्सन और अनुमति नियंत्रण है।

\n\n

विधि 1: is_dir() और mkdir() के साथ क्लासिक (शुरुआती के लिए)

\n\n

सबसे सरल और समझने योग्य तरीका — पहले जाँचें कि फ़ोल्डर मौजूद है या नहीं, फिर उसे बनाएँ।

\n\n
<?php\n$folder = '/var/www/uploads/images';\n\nif (!is_dir($folder)) {\n    mkdir($folder, 0755, true);\n    echo "फ़ोल्डर बन गया!";\n} else {\n    echo "फ़ोल्डर पहले से मौजूद है।";\n}\n?>
\n\n

यहाँ क्या महत्वपूर्ण है:

\n
    \n
  • is_dir() — true लौटाता है यदि पथ मौजूद है और एक डायरेक्ट्री है।
  • \n
  • mkdir($folder, 0755, true) — तीसरा पैरामीटर true रिकर्सिव निर्माण को सक्षम करता है। यदि पैरेंट फ़ोल्डर मौजूद नहीं है, तो PHP पूरी श्रृंखला बनाएगा (/var/www/uploads/images → पहले uploads बनाएगा, फिर images)।
  • \n
  • 0755 — अनुमतियाँ: मालिक सब कुछ कर सकता है, बाकी पढ़ और निष्पादित कर सकते हैं।
  • \n
\n\n

नुकसान: यह कोड race condition से सुरक्षित नहीं है। यदि दो अनुरोध एक साथ is_dir() की जाँच करते हैं और दोनों फ़ोल्डर बनाने का प्रयास करते हैं, तो दूसरा एक चेतावनी उत्पन्न करेगा।

\n\n

विधि 2: @mkdir() और त्रुटि जाँच के साथ औद्योगिक दृष्टिकोण

\n\n

अनुभवी डेवलपर अक्सर त्रुटि दमन ऑपरेटर @ का उपयोग करते हैं और फिर स्पष्ट रूप से परिणाम की जाँच करते हैं।

\n\n
<?php\n$folder = '/var/www/uploads/images';\n\nif (!is_dir($folder)) {\n    // यदि फ़ोल्डर पहले से मौजूद है तो warning दबाएँ\n    if (!@mkdir($folder, 0755, true) && !is_dir($folder)) {\n        throw new \\RuntimeException('फ़ोल्डर बनाने में विफल: ' . $folder);\n    }\n}\n?>
\n\n

यह बेहतर क्यों है?

\n
    \n
  • हम warning दबाते हैं, लेकिन त्रुटि को अनदेखा नहीं करते — यदि बनाना विफल होता है, तो एक अपवाद फेंका जाता है।
  • \n
  • mkdir() के बाद दोहरी जाँच !is_dir($folder) race condition से बचाती है: यदि किसी अन्य प्रक्रिया ने हमारी जाँच और mkdir() कॉल के बीच फ़ोल्डर बना दिया, तो हम विफल नहीं होंगे।
  • \n
\n\n

ध्यान दें: ऑपरेटर @ प्रदर्शन को कम करता है, क्योंकि PHP फिर भी त्रुटि उत्पन्न करता है, लेकिन इसे छिपा देता है। उच्च-लोड प्रोजेक्ट में विधि 3 का उपयोग करना बेहतर है।

ब्लॉग

पुस्तक अनुशंसाएँ