सवाल PHP स्क्रिप्ट 777 अनुमतियों के साथ निर्देशिका बनाने में असमर्थ


मेरे पास एक स्क्रिप्ट है जो स्वचालित रूप से एक निर्देशिका बनाता है यदि यह अस्तित्व में नहीं है और 777 पर अनुमतियां सेट करता है। समस्या यह है कि यह केवल 755 पर अनुमतियों को सेट कर रहा है:

if (!file_exists($this->get_upload_dir()))
    mkdir($this->get_upload_dir(), 0777);

अगर मैं इसे बनाए गए निर्देशिका के मालिक की जांच करता हूं, तो यह दिखाता है www-data [33]। मुझे यकीन नहीं है कि 33 का मतलब क्या है। है www-data उपयोगकर्ता सर्वर बनाने के लिए सर्वर का उपयोग करता है? यदि हां, तो मैं इसे 777 अनुमतियों के साथ निर्देशिका बनाने की अनुमति कैसे दे सकता हूं?

यह भी ध्यान दें, मैंने पहले ही निम्न आदेश सेट कर दिया है:

sudo chown -R www-data:www-data /var/www/html

1
2017-09-01 17:45


मूल


आप इसे कहां अपलोड कर रहे हैं? क्या मूल निर्देशिका एक है जिसे किसी अन्य उपयोगकर्ता द्वारा नियंत्रित किया जाता है, जैसे रूट? - ilarsona


जवाब:


www-data वह उपयोगकर्ता है जो apache2 वेबबर्वर उबंटू में चलता है। (आमतौर पर उस उपयोगकर्ता के पास 33 का यूआईडी होता है, जो संख्या आप देखते हैं।) इसलिए वेबसर्वर का उपयोग करके बनाई गई फाइलें उस फाइल के स्वामित्व में हैं। जब आप सर्जन करना इस प्रकार एक फाइल, umask सर्वर का खेल आता है और आपके द्वारा सेट की गई किसी भी अनुमति को उमास्क द्वारा नियंत्रित किया जाता है।

आप इसके आसपास तीन तरीकों से काम कर सकते हैं:

  1. उपयोग chmod बनाने के बाद अनुमति सेट करने के लिए PHP फ़ंक्शन।
  2. उपयोग umask बनाने से पहले उमास्क सेट करने के लिए PHP फ़ंक्शन। चेतावनी दीजिये, यह एक बहु थ्रेडेड सर्वर में सभी धागे के लिए उमास्क सेट करेगा और अनपेक्षित परिणाम हो सकता है।
  3. ठीक umask वेब सर्वर के लिए ही। यह (2) से भी बदतर है कि प्रत्येक प्रक्रिया और सर्वर में कॉन्फ़िगर हर साइट प्रभावित होती है।

सबसे अच्छा विकल्प (1) का उपयोग करना है। अच्छी तरह से देखिए यह SO जवाब (1) के एक उदाहरण के लिए, यह SO सवाल है (2) और एक चर्चा के लिए यह एसएफ सवाल है (3) के उदाहरण के लिए।


4
2017-09-01 18:01



ऐड-ऑन के रूप में, फ़ाइल मोड से पहले 0 से पहले मत भूलना। मेरे मामले के लिए, मैंने कोशिश की mkdir('path', 777) और यह काम नहीं किया। ऐसा इसलिए था क्योंकि संख्या होने की उम्मीद है अष्टभुजाकार - Niket Pathak