सेनारियो:
आपके पास प्रत्येक पंक्ति में एक स्ट्रिंग (औसत वाक्य लायक) के साथ एक फ़ाइल है। तर्कों के लिए यह कहने दें कि यह फ़ाइल आकार में 1Mb (हजारों लाइनें) है।
आपके पास एक स्क्रिप्ट है जो फ़ाइल को पढ़ती है, दस्तावेज़ के भीतर कुछ तारों को बदल देती है (न केवल आकर्षक, बल्कि कुछ लाइनों को हटाने और संशोधित भी करती है) और फिर नए डेटा के साथ सभी डेटा को अधिलेखित कर देती है।
प्रश्न:
क्या सर्वर 'PHP, OS या httpd आदि में पहले से ही इस तरह की समस्याओं को रोकने के लिए सिस्टम हैं (पढ़ने / लिखने के माध्यम से आधा रास्ता)?
यदि ऐसा होता है, तो कृपया बताएं कि यह कैसे काम करता है और प्रासंगिक प्रलेखन के उदाहरण या लिंक देता है।
यदि नहीं, तो क्या ऐसी चीजें हैं जो मैं सक्षम या सेट-अप कर सकता हूं, जैसे कि एक फ़ाइल को तब तक लॉक करना जब तक कि एक लेखन पूरा न हो जाए और अन्य सभी रीड्स और / या लिखना तब तक विफल हो जाए जब तक कि पिछली स्क्रिप्ट लिखना समाप्त न हो जाए?
मेरी मान्यताओं और अन्य जानकारी:
विचाराधीन सर्वर PHP और Apache या Lighttpd चला रहा है।
यदि स्क्रिप्ट एक उपयोगकर्ता द्वारा कॉल की जाती है और फ़ाइल में लिखने के माध्यम से आधी हो जाती है और दूसरा उपयोगकर्ता उस सटीक समय पर फ़ाइल पढ़ता है। जो उपयोगकर्ता इसे पढ़ता है, उसे पूर्ण दस्तावेज़ नहीं मिलेगा, क्योंकि यह अभी तक नहीं लिखा गया है। (यदि यह धारणा गलत है तो कृपया मुझे सुधारें)
मैं केवल PHP लिखने और एक पाठ फ़ाइल को पढ़ने के साथ संबंधित हूं, और विशेष रूप से, फ़ंक्शन "fopen" / "fwrite" और मुख्य रूप से "file_put_contents"। मैंने "file_put_contents" दस्तावेज़ देखा है, लेकिन "LOCK_EX" ध्वज क्या है या क्या करता है, इसका विवरण या विवरण का स्तर नहीं मिला है।
परिदृश्य सबसे खराब स्थिति का एक उदाहरण है, जहां मुझे लगता है कि इन मुद्दों को फ़ाइल के बड़े आकार और डेटा को संपादित करने के तरीके के कारण होने की अधिक संभावना है। मैं इन मुद्दों के बारे में अधिक सीखना चाहता हूं और "mysql का उपयोग करें" या "आप ऐसा क्यों कर रहे हैं" जैसे जवाब या टिप्पणियों की आवश्यकता नहीं है या नहीं, क्योंकि मैं ऐसा नहीं कर रहा हूं, मैं सिर्फ फ़ाइल पढ़ने / लिखने के बारे में सीखना चाहता हूं PHP के साथ और सही स्थानों / दस्तावेज़ीकरण में नहीं दिख रहा है और हाँ मैं समझता हूँ कि PHP इस तरह से फाइलों के साथ काम करने के लिए सही भाषा नहीं है।
file_put_contents()
fopen()/fwrite()
डांस के लिए सिर्फ एक रैपर है , LOCKEX
जैसा आप कॉल करेंगे वैसा ही होगा flock($handle, LOCKEX)
।