php का उपयोग कर फ़ाइल में लिखने के बाद fclose($handle)
फ़ंक्शन का उपयोग करके मुझे पूरा करने की आवश्यकता क्यों है? जब प्रोग्राम समाप्त होता है तो प्रोग्राम स्वचालित रूप से ऐसा नहीं करता है?PHP में फ़ाइल में लिखने के बाद मुझे 'fclose` क्यों चाहिए?
उत्तर
हां। लेकिन, इसे स्वयं करने का अच्छा अभ्यास है। साथ ही, आप स्क्रिप्ट के शेष भाग के पूरे निष्कर्ष के दौरान फ़ाइल को खुल जाएंगे, जिसे आपको टालना चाहिए। इसलिए जब तक आपकी लिपि लिखने के बाद सीधे आपकी स्क्रिप्ट निष्पादन समाप्त नहीं हो जाती है, तो आप मूल रूप से फ़ाइल को जितनी आवश्यकता हो उतनी देर तक छोड़ देते हैं।
जब प्रोग्राम समाप्त नहीं होता है या लंबा लगता है, तो यह सिस्टम में अधिकतम खुली फ़ाइल हैंडल की ओर गिना जाता है। लेकिन हाँ, PHP आलस्य के लिए अनुमति देता है।
जब कोई फ़ाइल खोली जाती है, तो उस पर एक ताला लगाया जाता है, जिससे अन्य प्रक्रियाओं को इसका उपयोग करने से रोका जा सकता है। fclose()
इस लॉक को हटा देता है।
$handle
कोई वस्तु नहीं है, केवल एक सूचक है। तो अनलॉक करने के लिए यह कहने वाला कोई विनाशक नहीं है।
मैं यहां आपके सर्वनामों से थोड़ा उलझन में हूं। जब आप कहते हैं कि उस पर एक ताला लगाया गया है, तो क्या आपका मतलब है कि फाइल पर लॉक लगाया गया है? यदि हां, तो फ़ंक्शन का उपयोग करने के साथ लॉक को क्या करना है? ताला क्या करता है? – locoboy
लॉक को फाइल पर रखा गया है। अगर आप फ़ाइल में लिख रहे हैं, और फिर एक और प्रक्रिया आती है और फ़ाइल लिखने की कोशिश करती है - एक्सेस अस्वीकार कर दिया जाएगा क्योंकि एक ही समय में दो अलग-अलग चीजें एक फाइल को नहीं लिख सकती हैं। लॉक दूसरी प्रक्रिया को लिखने में सक्षम होने से रोकता है। – zsalzbank
तो यह एक कारण है कि इससे कोई फर्क नहीं पड़ता? जब तक आपके पॉइंटर्स के लिए अलग-अलग नाम हों, तब तक आपको एक ही प्रोग्राम में एकाधिक फ़ाइलों को लिखने में कोई समस्या नहीं होनी चाहिए। – locoboy
हां, PHP सामान्य रूप से बाहर निकलने से पहले फ़ाइल को बंद कर देता है। लेकिन आप हमेशा इसे मैन्युअल रूप से बंद हो जाना चाहिए:
1- यह एक अच्छा प्रोग्रामिंग अभ्यास
2- पीएचपी अप्रत्याशित रूप से बाहर निकल सकते हैं (उदाहरण के लिए, न आया हुआ अपवाद) है। यह फ़ाइल को कतार में कुछ लिखा जा सकता है, या इसमें लॉक के साथ छोड़ सकता है।
मैं अभी भी फ़ाइल हैंडल को साफ करने के लिए एक अपवाद अपवाद की उम्मीद करता हूं। हालांकि, मैंने निश्चित रूप से कुछ बार से अधिक PHP सेगफॉल्ट देखा है, और उस स्थिति में PHP कोई भी प्रकार का क्लीनअप नहीं कर सकता है –
न केवल PHP में, प्रत्येक भाषा में हमें काम पूरा होने पर धारा बंद करनी चाहिए। इस तरह हम दूसरों को उस फ़ाइल का उपयोग करने की इजाजत दे रहे हैं। यदि हम इसे बंद नहीं करते हैं, तो प्रोग्राम तब तक इसका उपयोग नहीं कर सकते जब तक कि प्रोग्राम पूरी तरह समाप्त न हो जाए (इस मामले में पृष्ठ)।
भी फ़ाइल वर्णनकर्ता खुला छोड़ करने के लिए सुरक्षा के प्रभाव होते हैं: http://cwe.mitre.org/data/definitions/403.html
आपका कार्यक्रम अलग विशेषाधिकार के स्तर के साथ एक कार्यक्रम है, और एक लीक फ़ाइल वर्णनकर्ता पर अमल हो सकता है निजी जानकारी दो अलग-अलग विश्वास की प्रक्रियाओं के बीच सीमा पार करने के लिए अनुमति दे सकता है स्तर:
http://osvdb.org/7559
CVE-2006-5397
CVE-2007-5159
CVE-2008-3914
सुरक्षा बग के साथ मजेदार बात यह है कि जब आप प्रारंभिक फ़ंक्शन लिखते हैं तो यह पूरी तरह से सुरक्षित हो सकता है, लेकिन एक या दो साल बाद निर्दोष दिखने वाले बदलाव के कारण असुरक्षित हो सकता है।
आउटपुट बफर में बैठे अनजान डेटा हो सकते हैं जो फ़ाइल बंद होने तक लिखे नहीं जाते हैं। यदि अंतिम लेखन पर कोई त्रुटि उत्पन्न होती है, तो आप यह नहीं बता सकते कि आउटपुट अधूरा है जो बाद में सभी प्रकार की समस्याओं का कारण बन सकता है।
स्पष्ट रूप से बुला fclose()
और अपनी वापसी मान लगा कर आप अवसर के लिए है:
- पुन: प्रयास करें आपरेशन
- उतारना परिवर्तन
- वापसी एक कॉलिंग कार्य करने के लिए एक विफलता की स्थिति
- उपयोगकर्ता को समस्या की रिपोर्ट करें
- लॉग फ़ाइल में समस्या को दस्तावेज़
- निष्पादन वातावरण (जैसे कमांड लाइन खोल) के लिए विफलता संकेत लौटाएं जो टूल श्रृंखला में उपयोग किए जाने पर महत्वपूर्ण हो सकता है।
या कोई अन्य तरीका जो आपकी स्थिति को फिट करता है।
यह fclose()
manual page के टिप्पणी अनुभाग में उल्लेख है।
- 1. मुझे PHP में इंटरफ़ेस क्यों बनाना चाहिए?
- 2. PHP के बाद मुझे क्या सीखना चाहिए?
- 3. मुझे सी # में एक फ़ाइल क्यों बंद करनी चाहिए?
- 4. मुझे प्रोग्राम लिखने के बारे में कैसे सीखना चाहिए?
- 5. क्या मुझे बिल्ली में हेड्रोक लिखने के लिए बिल्ली चाहिए?
- 6. मुझे PHP ढांचे को क्यों सीखना चाहिए?
- 7. इसे लिखने के बाद एक नई ब्राउज़र विंडो में फ़ाइल खोलें (fopen के साथ)
- 8. PHP में फ़ाइल लिखने के लिए कैसे करें?
- 9. PHP फ़ाइल आकार
- 10. क्या मुझे PHP में mysql से पुनः कनेक्ट करना चाहिए?
- 11. जावास्क्रिप्ट में प्रत्येक फ़ंक्शन के बाद मुझे अर्धविराम का उपयोग क्यों करना चाहिए?
- 12. आर में लोड होने के बाद मुझे एक hdf5 फ़ाइल कैसे बंद करनी चाहिए?
- 13. मुझे ओपेरा के बारे में क्यों परवाह करना चाहिए?
- 14. मुझे हैशिंग पासवर्ड के बारे में क्यों परवाह करना चाहिए?
- 15. मुझे इकाई फ्रेमवर्क के बारे में परेशान क्यों होना चाहिए?
- 16. PHP में फ़ंक्शन बहिष्कृत, अब मुझे क्या उपयोग करना चाहिए?
- 17. क्या मुझे मास्टर में विकसित विलय करना चाहिए और फिर टैगिंग के बाद वापस जाना चाहिए?
- 18. क्या मुझे PHP में वैश्विक कार्यों का नाम देना चाहिए?
- 19. PHP फ़ाइल के अंदर टैब अक्षरों को लिखने के लिए?
- 20. PHP में फ़ाइल में कैसे लिखें?
- 21. क्या मुझे सॉकेट्स को पढ़ने/लिखने के लिए फ़ाइल डिस्क्रिप्टर या स्ट्रीम का उपयोग करना चाहिए
- 22. गिट में आने से पहले मुझे मंच क्यों चाहिए?
- 23. मुझे अपनी PHP कक्षा फ़ाइल का नाम क्या देना चाहिए?
- 24. php.ini: मुझे क्या लिखना चाहिए, लिखने के लिए <? इसके बजाय <? php?
- 25. मुझे COM क्यों सीखना चाहिए?
- 26. खोज क्वेरी लिखने में मदद चाहिए
- 27. मुझे std :: get_temporary_buffer क्यों चाहिए?
- 28. हास्केल में, मुझे अपने ब्लॉक से पहले $ डालना क्यों चाहिए?
- 29. मुझे सीएलएस अनुपालन कोड क्यों लिखना चाहिए?
- 30. मुझे PHP कक्षा में चर कब घोषित करना चाहिए?
हां। PHP स्वचालित रूप से स्क्रिप्ट समाप्ति पर फ़ाइल हैंडल बंद कर देता है। किसी भी प्रकार की सीमाओं में जहां स्क्रिप्ट को फ़ाइल IO के बाद तुरंत समाप्त नहीं किया जाएगा, हालांकि फ़ाइल को बंद करना शायद एक अच्छा विचार है। उदाहरण के लिए, यदि आप एक लाइब्रेरी लिखते हैं, और उस लाइब्रेरी का उपयोग एक सीएलआई स्क्रिप्ट द्वारा किया जाता है जो आपकी लाइब्रेरी को सैकड़ों बार काम करता है, तो प्रत्येक कॉल के बाद फ़ाइल को बेहतर बंद कर दिया गया था। –
@ फ्रैंक, जो एक उत्तर होना चाहिए था ताकि इसे ऊपर उठाया जा सके। :) – sarnold