2010-10-07 16 views
13

मैं इस कोड के साथ उलझन में हूँ:पीएचपी: fopen() अनुमति अस्वीकृत

test.php:

fopen('test.txt','a+'); 

जब मैं इसे निष्पादित, मैं कोई त्रुटि मिलती है:

Warning: fopen(test.txt): failed to open stream: 
    Permission denied in /var/www/html/yuelu3/mobile/text.php on line 2 

परीक्षण .txt:

-rwxrwxrwx. 1 jt jt  87 10月 7 20:58 test.txt 

समस्या कहां है?

बहुत बहुत धन्यवाद! मुझे समस्या मिली है, मैं एसईसीनक्स की सुरक्षा के कारण एफसी 13 का उपयोग करता हूं, कुछ कार्रवाई अस्वीकार कर दी गई है। इसलिए, मुझे केवल सुरक्षा से छुटकारा पाना होगा।

+4

पर संदर्भों के बारे में अधिक प्राप्त कर सकते हैं किसी भी संयोग से एक एनएफएस घुड़सवार निर्देशिका पर स्थित फ़ाइल होगा: इस का उपयोग कर हल किया जा सकता? – SirDarius

+3

क्या आपने फ़ाइल में मौजूद निर्देशिका की अनुमतियों की भी जांच की है? –

+1

क्या php 'jt' उपयोगकर्ता के रूप में चल रहा है? अगर आप जिस फ़ाइल को खोलना चाहते हैं वह किसी अन्य उपयोगकर्ता के स्वामित्व में है, तो यह भी एक समस्या हो सकती है। – methode

उत्तर

5

उपयोग fopen($_SERVER['DOCUMENT_ROOT'].'test.txt','a+');

+2

+1 और उस file_exists को भी जांचने पर विचार करें! – Fenton

13

सबसे अधिक संभावना एक और निर्देशिका

4

पथ में लग रही है हमेशा समस्याओं का कारण जब फ़ाइलों को खोलने की कोशिश कर के रूप में

fopen('test.txt','a+'); 

fopen('/path/to/file/test.txt','a+'); 

प्रयास करें। जब आप फ़ाइलों को खोलने का प्रयास कर रहे हों तो कोई समस्या होने से बचने का एक आसान तरीका यह है कि आप किस निर्देशिका में हैं, और आप कहां कॉल कर रहे हैं।

echo getcwd(); 

एक साधारण PHP पृष्ठ बनाएं और वर्तमान निर्देशिका को कॉल प्रिंट करें। PHP पृष्ठ को फ़ाइल के समान निर्देशिका में छोड़ दें, और यह आपको फ़ोल्डर के सही पथ बताएगा और फिर /filename.xxx पर जोड़ देगा। httpd_user_content_t

... अगर ऐसा नहीं है, उपयोग:

chcon httpd_user_content_t test.txt 

... समस्या को दूर करने

4

चेक फ़ाइल के SELinux संदर्भ मोड यकीन है कि यह करने के लिए सेट कर दिया जाता हो।

6

मुझे PHP का उपयोग कर सर्वर पर फ़ाइल लिखने का प्रयास करते समय "स्ट्रीम खोलने में विफल" त्रुटि प्राप्त हुई है। मैंने त्रुटि को ठीक करने के लिए इंटरनेट पर सब कुछ करने की कोशिश की। मैंने सर्वर पर फ़ाइलों, निर्देशिकाओं और उपनिर्देशिकाओं के स्वामित्व को "अपाचे" में बदल दिया, मैंने सभी फाइलों, निर्देशिकाओं, उप-निर्देशिकाओं पर "chmod 777" किया, मैंने "restorecon -R" चलाया, मैंने भाग लिया "chcon unconfined_u: object_r: httpd_user_content_t: s0 "सभी फाइलों पर, लेकिन काम करने लगने वाली एकमात्र चीज़ SELinux को पूरी तरह से बंद कर रही है।

मैंने अंततः इस मुद्दे को हल किया। समस्या SELinux द्वारा उपयोग किए गए बुलियन पैरामीटर में रखी गई है। मैंने httpd से संबंधित सभी बूलियन की सूची प्राप्त करने के लिए निम्न आदेश दिया।

$ getsebool -a | grep httpd

इसने 36 पैरामीटर की एक सूची दी।

मैं दर्द से चला गया और सेटसेबूल कमांड का उपयोग करके प्रत्येक बूलियन चालू कर दिया जब तक कि "स्ट्रीम खोलने में विफल रहा। अनुमति अस्वीकार" त्रुटि दूर हो गई।

जब मैंने httpd_unified बूलियन चालू किया, तो त्रुटि चली गई !! जब मैंने इसे "बंद" कर दिया, तो त्रुटि वापस आई !!

+0

बहुत बहुत धन्यवाद। मैंने बस 777 में सभी निर्देशिकाओं और उप-निर्देशिकाओं का chmod बदल दिया और यह मेरे लिए ठीक काम किया! –

5

यह समस्या SELinux सक्षम होने का भी परिणाम हो सकती है।

chown -R apache:apache /var/www/html/directory_to_write 
chcon -R -t httpd_sys_content_t /var/www/html/directory_to_write 
chcon -R -t httpd_sys_rw_content_t /var/www/html/directory_to_write 

आप https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Confined_Services/sect-Managing_Confined_Services-The_Apache_HTTP_Server-Types.html

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