2012-05-04 14 views
6

हमारे पास सांबा के साथ एक फ्रीबीएसडी सर्वर है जो कर्मचारी छवि फ़ाइलों को कॉपी करते हैं, जो तब हमारे वेब सर्वर पर अपलोड हो जाते हैं (इस तरह उन्हें FTP के साथ गड़बड़ नहीं होती है)। कभी-कभी, यदि अपलोड स्क्रिप्ट एक ही समय में चल रही है जैसे फ़ाइलों की प्रतिलिपि बनाई जा रही है, तो यह एक अपूर्ण फ़ाइल अपलोड कर सकता है।क्या यह देखने का कोई बेहतर तरीका है कि फ़ाइल को लिखा जा रहा है या नहीं?

हमने फ़ाइल आकारों के साथ फ़ाइलों की सूची प्राप्त करके, 5 सेकंड प्रतीक्षा करने और फ़ाइल आकारों को फिर से जांचकर इसे ठीक किया। यदि आकार मेल खाते हैं तो अपलोड करने के लिए इसे सहेजते हैं, अगर वे मेल नहीं खाते हैं तो यह 5 सेकंड में फिर से जांचता है।

यह जांचने के लिए एक अजीब तरीका लगता है कि फाइलें लिखी जा रही हैं या नहीं। क्या ऐसा करने का एक बेहतर, अधिक सरल तरीका है?

+0

'if (! झुंड ($ एफपी, LOCK_EX | LOCK_NB)) {// फ़ाइल लेखन के लिए बंद कर दिया गया है? – DaveRandom

+0

'झुंड() 'शायद? –

+0

सुनिश्चित नहीं है कि 'झुंड()' और समब के ताले एक दूसरे को विश्वसनीय रूप से देखेंगे - वहां कुछ समस्याएं थीं –

उत्तर

2

एक flock समारोह http://php.net/flock का प्रयोग करें।

अपलोड स्क्रिप्ट विशेष लेखन लॉक भी प्राप्त करने का प्रयास कर सकती है, अगर यह सफल हो जाती है तो फ़ाइल को स्थानांतरित करने के लिए ठीक है, अन्यथा नहीं।

संपादित करें: क्षमा करें, मैं उन साम्बा के माध्यम से सर्वर से फ़ाइलों की प्रतिलिपि बनाने के बारे में भूल ... इसलिए जब कॉपी करने flock उपयोग करने के लिए कोई जगह नहीं है ... लेकिन अपलोड स्क्रिप्ट अभी भी देखने के लिए flock($handle, LOCK_EX) इस्तेमाल कर सकते हैं, अगर यह सफल है या नहीं।

2

मैं shell_exec() smbstatus (1), उदाहरण के लिए अनुशंसा करता हूं लॉक की गई फ़ाइलों की जांच के लिए smbstatus -LB

0

सांबा सर्वर पर फ़ाइलों को एक अस्थायी फ़ोल्डर में कॉपी करने के लिए एक स्क्रिप्ट लिखें और फिर, पूरी तरह से कॉपी और फ़्लश होने पर, स्थानांतरित करें (यानी, अनलिंक/लिंक, दोबारा कॉपी न करें), उन्हें अपलोड फ़ोल्डर। , जब लेखन एक फ़ाइल एक विशेष ताला flock($handle, LOCK_EX) प्राप्त होने के बाद यह रिलीज ताला flock($handle, LOCK_UN) लिखा है -

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

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