2012-01-19 11 views
5

मैं PHP के लिए नया हूँ। मैं समझता हूं कि मैं फ़ाइल को लॉक करने और दौड़ की स्थिति से बचने के लिए flock() का उपयोग कर सकता हूं जब दो उपयोगकर्ता लॉक करने योग्य फ़ाइल में सामग्री जोड़ते हुए एक ही php फ़ाइल तक पहुंचते हैं।PHP प्रक्रिया/सर्वर क्रैश होने पर फ़ाइल deadlocks से कैसे बचें?

हालांकि, यदि कोई php प्रक्रिया क्रैश हो जाती है तो क्या होता है? लॉक करने योग्य फ़ाइल के लिए अगले उपयोगकर्ता का इंतजार क्या होता है? क्या होता है यदि सर्वर दुर्घटनाग्रस्त हो जाता है (कोई प्लग खींचता है)? क्या लॉक स्वचालित रूप से जारी किया गया है? सर्वर को रिबूट करने के बाद फ़ाइल लॉक रह जाएगी?

इसे छोटा करने के लिए, क्या PHP सुनिश्चित करता है कि ऐसी महत्वपूर्ण परिस्थितियां (यानी, स्पष्ट रूप से रिलीज़ नहीं किया गया है) ठीक से संभाला जाता है? यदि नहीं, तो इन परिस्थितियों से कैसे निपटना चाहिए? इनसे कैसे ठीक हो सकता है?

उत्तर

5

लॉक ओएस द्वारा संभाले जाते हैं। इसलिए:

  • अगर एक प्रक्रिया दुर्घटनाओं, सभी ताले यह निर्णय किया
  • अगर प्रणाली दुर्घटनाओं (यह आयोजित संसाधन के किसी भी अन्य प्रकार के साथ) जारी कर रहे हैं, ताले, क्योंकि वे करने के लिए "पर ले" नहीं है व्यर्थ हैं अगले रिबूट

पीएचपी तो सामान्य रूप में आप पूरी तरह से सुरक्षित हैं, की तुलना में फ़ाइलों को लॉक करने के लिए ओएस-प्रदान की व्यवस्था का उपयोग कुछ विशेष अन्य सब करने की ज़रूरत नहीं है।

हालांकि, यदि आपका वेब सर्वर सेटअप ऐसी है कि प्रत्येक अनुरोध एक नई प्रक्रिया के द्वारा नियंत्रित नहीं कर रहा है तो अगर एक अनुरोध असामान्य रूप से समाप्त किया जाता है (मान लीजिए कि एक धागा गर्भपात है चलो) ताला बना रहेगा और के लिए आगे की सभी अनुरोधों को अवरुद्ध ताला, जल्दी से एक deadlocked वेब सर्वर के परिणामस्वरूप। यह वास्तव में कई कारणों में से एक है, वास्तव में उन सेटअपों का उपयोग नहीं करना चाहिए जो अनुरोधों के बीच प्रक्रिया-स्तर अलगाव प्रदान नहीं करते हैं (अस्वीकरण: मैं एक वेब सर्वर विशेषज्ञ नहीं हूं - मैं "भाग नहीं" भाग में गलत हो सकता हूं, भले ही मुझे संदेह है कि)।