2016-11-16 6 views
5

मैं समझने की कोशिश कर रहा हूं कि अनुमतियां 000 सेट करने और फ़ाइल रूट स्वामित्व देने के बाद अपाचे अभी भी एक PHP फ़ाइल की सेवा करने में सक्षम क्यों है।अपाचे अभी भी गलत अनुमतियों के साथ PHP फ़ाइल की सेवा कर रहा है

यदि मैं 644 अनुमतियों के साथ वेबसर्वर द्वारा स्वामित्व वाली एक PHP फ़ाइल बना देता हूं, तो यह सही ढंग से कार्य करता है। यदि मैं फिर 000 की अनुमतियों को बदलता हूं और स्वामित्व को रूट में बदलता हूं, तो फ़ाइल अभी भी परोसा जाता है, लेकिन मुझे नहीं लगता कि यह होना चाहिए!

यदि मैं अपाचे को पुनरारंभ करता हूं तो फ़ाइल परोसा नहीं जाता है। मुझे 500 मिलते हैं और त्रुटि लॉग फ़ाइल खोलने में सक्षम नहीं होने के बारे में बताता है, जो वास्तव में वह व्यवहार है जिसे मैं उम्मीद करता हूं।

पुनरारंभ करने के बाद, जब फ़ाइल परोसा नहीं जा रहा है, तो यदि मैं स्वामित्व को वेबसर्वर पर वापस भेजता हूं और 644 पर अनुमतियां बदलता हूं, तो फाइल को दोबारा अपाचे की पुनरारंभ करने के बिना फिर से परोसा जाता है।

यह व्यवहार केवल PHP फ़ाइलों के लिए सच है। जैसे ही आप अनुमतियों को हटाते हैं, एचटीएमएल फाइलें व्यवहार करती हैं, फाइलें परोसा नहीं जाता है।

यह मेरे लिए सुझाव दिया गया कि अपाचे PHP फ़ाइल पर एक फ़ाइल हैंडल को बनाए रखने हो सकता है और यह है कि यह अनुमति परिवर्तन नहीं देख रहा था जब तक यह पुन: प्रारंभ। मैंने फ़ाइल पर lsof का उपयोग करने का प्रयास किया है, लेकिन कोई खुली फ़ाइल वर्णनकर्ता नहीं देखा।

मैं भी कोशिश की और प्रयोग जहां मैं वेबसर्वर स्वामित्व और 644 अनुमति के साथ शुरू कर दिया और जाँच की फ़ाइल में कार्य किया जा सकता है। फिर मैंने फ़ाइल का नाम बदल दिया, अनुमतियों को 000 में बदल दिया और स्वामित्व को रूट में बदल दिया और फिर फ़ाइल को वापस ले जाया गया। इसके बाद, फ़ाइल अभी भी अपाचे द्वारा की गई थी।

क्या कोई यहां क्या हो रहा है इस पर कोई प्रकाश डाल सकता है?

+0

इस के साथ प्रयोग करें: पहुँच 'my.hostname/index.php' से पहले और परिवर्तन के बाद, और फिर का उपयोग' my.hostname/index.php itok = randomnumbers' अगर दूसरा अनुरोध तो विफल रहता है यह कैशिंग है?। – apokryfos

+0

क्या आप सुनिश्चित हैं कि साइट कैश से परोसा नहीं गया है? – dev0

+0

@apokryfos मैंने जांच की है और यह निश्चित रूप से कैशिंग नहीं है। मैंने सेकंड में समय दिखाने और क्वेरी स्ट्रिंग दिखाने के लिए स्क्रिप्ट को बदल दिया है। मेरे पोस्ट में वर्णित परीक्षणों के परिणाम समान हैं और समय अपडेट हो रहा है और क्वेरी स्ट्रिंग (जिसे मैं हर बार बदलता हूं) प्रदर्शित किया जा रहा है। – Dom

उत्तर

5

सबसे अधिक संभावना क्या हो रहा है कि आपके पास ओपेकैच चल रहा है। PHP रनटाइम पर खुद को संकलित करता है। ओवरहेड को बचाने के लिए, PHP 5.5 या बाद में Opcache है, जो उस संकलित चरण को बचाता है। तो अपाचे शायद फाइल को कैशिंग कर रहा है। अपाचे तब कैश फ़ाइल को अपनी अनुमतियों के साथ स्टोर करेगा। अपाचे भी स्मृति में इसे कैशिंग भी कर सकता है। जब आप अपाचे को पुनरारंभ करते हैं तो उसे मूल PHP फ़ाइल पर वापस जाना होगा, जिसके पास अब अनुमति नहीं है।

+0

यूप, बस चेक किया गया और इसकी दौड़ चल रही है। मुझे नहीं लगता था कि यह स्थापित किया गया था। – Dom

+1

ने अपने सभी परिणामों को opcache.enable = 0 के साथ दोबारा जांच लिया और यह काम करता है जैसा कि मैं अपेक्षा करता हूं - 000 अनुमतियों वाली फ़ाइलों तक पहुंच को अस्वीकार कर रहा हूं। धन्यवाद – Dom

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