2008-10-12 17 views
5

मैंने डायरेक्टरी सामग्री के साथ निर्देशिका को 777 पर chmoded किया। फिर भी, मुझे "अनुमति अस्वीकार" त्रुटि मिलती है। यदि फ़ाइल अनुमतियों के बावजूद, अपाचे समूह/मालिक नहीं है, तो क्या PHP इस त्रुटि को फेंक देता है? यहाँ कॉल कि नाकाम रहने है:निर्देशिका का नाम बदलने का प्रयास करते समय मुझे PHP में "अनुमति अस्वीकार क्यों" मिलती है?

rename('/correct/path/to/dir/1', '/correct/path/to/dir/2'); 

उत्तर

11

आप उच्च स्तरीय निर्देशिका संपादित कर रहे हैं, इसलिए PHP उपयोगकर्ता को उस निर्देशिका में लेखन पहुंच की आवश्यकता है।

0

निम्न स्क्रिप्ट चलाने की कोशिश करें:

print_r(posix_getpwuid(getmyuid())); 
print_r(pathinfo($YOUR_PATH)); 

और यही रिटर्न को देखते हैं।

2

शायद इसलिए है क्योंकि apache मूल निर्देशिका का मालिक नहीं है। एक फाइल का नाम बदलना (या चलना) मूल रूप से एक नई फाइल बनाने के समान ही है।

2

स्पष्ट करने के लिए, php केवल निर्देशिका नाम बदल सकते हैं इस पर वास्तविक स्वामित्व है:

// this operation fails as PHP (running as apache) does not own "temp", 
// despite having write permissions  
rename('temp', 'temp.bak'); 

// this operation is successful as PHP owns "temp2" 
rename('temp2, 'temp.bak'); 
+0

सुरक्षित मोड में सही है लेकिन अन्य सभी मामलों में स्वामित्व की आवश्यकता नहीं है - उपयुक्त अनुमतियों के साथ सरल chmod पर्याप्त है। – brezanac

0

एक और बात यह है कि इन मदद कर सकता है:

-rwxrwxrwx user user temp/ 
-rwxr-xr-x apache apache temp2/ 
-rw-r--r-- user user script.php 

script.php इन दो निर्देशिका का नाम बदलने की कोशिश कर रहा है मान वास्तव में अनुमतियों को कम करने की कोशिश करने के लिए स्थितियों की तरह है। मैंने उन अवसरों को देखा है जहां अपाचे कुछ करने के लिए एप्लिकेशन अनुमति से इनकार करता है क्योंकि इसकी अनुमतियां भी उच्च सेट की गई हैं। मेरा अनुमान है कि यह अच्छी सुरक्षा अभ्यास को प्रोत्साहित करना है।

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

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