2011-01-13 10 views
6

यदि मैं file_put_contents के माध्यम से FILE_APPEND ध्वज सेट के साथ फ़ाइल में डेटा लिखता हूं और दो उपयोगकर्ता एक ही समय में डेटा सबमिट करते हैं, तो क्या यह ध्यान में रखेगा, या क्या एक प्रविष्टि ओवरराइट की जाएगी?दो उपयोगकर्ता एक ही समय में एक फ़ाइल को लिखते हैं? (PHP/file_put_contents)

यदि मैं LOCK_EX ध्वज सेट करता हूं, तो दूसरा सबमिशन पहले सबमिशन को पूरा करने के लिए इंतजार करेगा, या एक विशेष लॉक प्राप्त नहीं होने पर डेटा खो गया है?

PHP आमतौर पर इसे कैसे संभालता है? मैं संस्करण 5.2.9 चला रहा हूँ। अगर यह मायने रखता है।

धन्यवाद, रयान

उत्तर

2

आप भी उचित ताला लागू करने के लिए flock समारोह की जांच कर सकता है (जबकि/नींद चाल के आधार पर नहीं)

+0

क्या यह प्रभावी नहीं है कि LOCK_EX संशोधक कर रहा है ? –

+0

मैनुअल कहता है: "डिफ़ॉल्ट रूप से, यह फ़ंक्शन तब तक अवरुद्ध होगा जब तक अनुरोधित लॉक अधिग्रहण नहीं किया जाता है; इसे नीचे दिए गए LOCK_NB विकल्प के साथ नियंत्रित किया जा सकता है (गैर-विंडोज प्लेटफ़ॉर्म पर)। तो यदि LOCK_EX तुरंत एक त्रुटि के साथ लौटता है, तो यह वही व्यवहार नहीं है – Ass3mbler

+0

कूल - ऐसा लगता है कि ओपी ठीक है। मुझसे +1 :-) –

1

आप LOCK_EX के माध्यम से एक विशेष फ़ाइल लॉक सेट करते हैं, तो दूसरे पटकथा (समय के लिहाज से) कि लिखने के लिए प्रयास करता है बस file_put_contents से अवास्तविक लौटाते हैं।

i.e .: यह बैठेगा और फ़ाइल लिखने के लिए उपलब्ध होने तक प्रतीक्षा नहीं करेगा। (उदा .: 3) प्रत्येक प्रयास के बीच sleep का एक उपयुक्त आकार उपयोग के साथ

जैसे, यदि ऐसा है तो आवश्यक आप इस व्यवहार अपने आप में कार्यक्रम, शायद file_put_contents एक सीमित समय की संख्या उपयोग करने का प्रयास द्वारा की आवश्यकता होगी।

+1

आप को चलाने के लिए की आवश्यकता होगी एक 'while' और एक' के बाद एक 'file_exists' होने की जाँच sleep' अनलॉक – RobertPitt

+0

के लिए प्रतीक्षा करने में सक्षम प्रश्न # 1 के बारे में क्या ... अगर मैंने लॉक का उपयोग नहीं किया, तो क्या होगा? – NightHawk

+0

@RobertPitt - इन पंक्तियों के साथ मेरा उत्तर अपडेट कर रहा था। ऊपर की ओर file_exists पर अच्छी कॉल जांचें। :-) –

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