मैं अपने सर्वर कमांड के साथ PHP का उपयोग पर एक निर्देशिका बनाने के लिए कोशिश कर रहा हूँ:PHP 777 अनुमतियों के साथ निर्देशिका क्यों नहीं बना सकता?
mkdir("test", 0777);
लेकिन यह पूर्ण अनुमति नहीं देता है, केवल इन:
rwxr-xr-x
मैं अपने सर्वर कमांड के साथ PHP का उपयोग पर एक निर्देशिका बनाने के लिए कोशिश कर रहा हूँ:PHP 777 अनुमतियों के साथ निर्देशिका क्यों नहीं बना सकता?
mkdir("test", 0777);
लेकिन यह पूर्ण अनुमति नहीं देता है, केवल इन:
rwxr-xr-x
मोड द्वारा संशोधित किया गया है आपके वर्तमान umask
, जो इस मामले में 022
है।
जिस तरह से umask
काम एक घटिया है। आप mkdir
को दिया प्रारंभिक अनुमति लेने के लिए और घटाना umask
वास्तविक अनुमति प्राप्त करने के:
0777
- 0022
======
0755 = rwxr-xr-x.
आप नहीं चाहते यदि ऐसा होता है, तो आप अपना कोई umask
अस्थायी रूप से शून्य करने के लिए तो यह है निर्धारित करने की आवश्यकता प्रभाव। आप निम्नलिखित स्निपेट के साथ ऐसा कर सकते हैं:
$oldmask = umask(0);
mkdir("test", 0777);
umask($oldmask);
पहली पंक्ति शून्य करने के लिए umask
बदल जाता है, जबकि $oldmask
में पिछले एक भंडारण। दूसरी पंक्ति वांछित अनुमतियों का उपयोग कर निर्देशिका बनाता है और (अब अप्रासंगिक) umask
। तीसरी पंक्ति umask
को मूल रूप से जो पुनर्स्थापित करती है उसे पुनर्स्थापित करती है।
शायद, अपने umask उन
फ़ाइलों और निर्देशिकाओं के निर्माण umask की स्थापना से प्रभावित होता है बाहर करने के लिए निर्धारित है। आप umask जोड़ तोड़ के रूप में निम्नानुसार द्वारा अनुमतियों के एक विशेष सेट के साथ फ़ाइलें बना सकते हैं: -
$old = umask(0);
mkdir("test", 0777);
umask($old);
जो लोग
mkdir('path', 777);
की कोशिश की और यह काम नहीं किया।
ऐसा इसलिए है क्योंकि जाहिर है, फ़ाइल मोड से पहले 0 बहुत महत्वपूर्ण है जो कि पास के नंबर को दशमलव के बजाय उत्तरार्द्ध के रूप में समझने के लिए chmod बताता है।
Ps। यह प्रश्न का समाधान नहीं है, लेकिन स्वीकार किए गए anwser
पर केवल एक ऐड-ऑन मल्टीथ्रेड किए गए वेबसर्वर में इस फ़ंक्शन का उपयोग करने से बचें। फाइल बनाने के बाद chmod() के साथ फ़ाइल अनुमतियों को बदलना बेहतर है।
उदाहरण:
$dir = "test";
$permit = 0777;
mkdir($dir);
chmod($dir, $permit);