2010-10-22 8 views
43

मैं अपने सर्वर कमांड के साथ PHP का उपयोग पर एक निर्देशिका बनाने के लिए कोशिश कर रहा हूँ:PHP 777 अनुमतियों के साथ निर्देशिका क्यों नहीं बना सकता?

mkdir("test", 0777); 

लेकिन यह पूर्ण अनुमति नहीं देता है, केवल इन:

rwxr-xr-x 

उत्तर

108

मोड द्वारा संशोधित किया गया है आपके वर्तमान 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 और mkdir के लिए PHP डॉको देखें।

12

फ़ाइलों और निर्देशिकाओं के निर्माण umask की स्थापना से प्रभावित होता है बाहर करने के लिए निर्धारित है। आप umask जोड़ तोड़ के रूप में निम्नानुसार द्वारा अनुमतियों के एक विशेष सेट के साथ फ़ाइलें बना सकते हैं: -

$old = umask(0); 
mkdir("test", 0777); 
umask($old); 
0

जो लोग

mkdir('path', 777);

की कोशिश की और यह काम नहीं किया।

ऐसा इसलिए है क्योंकि जाहिर है, फ़ाइल मोड से पहले 0 बहुत महत्वपूर्ण है जो कि पास के नंबर को दशमलव के बजाय उत्तरार्द्ध के रूप में समझने के लिए chmod बताता है।

Reference

Ps। यह प्रश्न का समाधान नहीं है, लेकिन स्वीकार किए गए anwser

0

पर केवल एक ऐड-ऑन मल्टीथ्रेड किए गए वेबसर्वर में इस फ़ंक्शन का उपयोग करने से बचें। फाइल बनाने के बाद chmod() के साथ फ़ाइल अनुमतियों को बदलना बेहतर है।

उदाहरण:

$dir = "test"; 
$permit = 0777; 

mkdir($dir); 
chmod($dir, $permit); 
संबंधित मुद्दे