संभावित कारण श्रृंखला
- सर्वर को पता नहीं है कि XHR अनुरोध रद्द कर दिए गए हैं, और इसलिए संबंधित PHP प्रक्रियाएं चलती रहती हैं
- ये PHP प्रक्रियाएं सत्रों का उपयोग करती हैं, और इस सत्र में समवर्ती पहुंच को तब तक रोकती हैं जब तक कि वे समाप्त न हो जाएं
संभावित समाधान
उपरोक्त दो बिंदुओं में से किसी एक को संबोधित करने से श्रृंखला टूट जाती है और समस्या ठीक हो सकती है:
- (a)
ignore_user_abort
FALSE
है डिफ़ॉल्ट रूप से, लेकिन आप एक गैर-मानक सेटिंग का उपयोग कर रहे होंगे। इस सेटिंग को वापसFALSE
. में बदलें आप मेंphp.ini
याignore_user_abort(false)
पर कॉल करें उन लिपियों में जो इन बाधित अनुरोधों को संभालती हैं।
दोष:स्क्रिप्ट बस समाप्त हो जाती है। कोई भी कार्य प्रगति पर है, संभवतः सिस्टम को गंदी स्थिति में छोड़कर, छोड़ दिया जाता है।
- (b) डिफ़ॉल्ट रूप से, PHP यह पता नहीं लगाएगी कि उपयोगकर्ता ने कनेक्शन को तब तक निरस्त कर दिया है जब तक क्लाइंट को जानकारी भेजने का प्रयास नहीं किया जाता है।
echo
करें आपकी लंबे समय से चल रही स्क्रिप्ट के दौरान समय-समय पर कुछ।
दोष:यह डमी डेटा आपकी स्क्रिप्ट के सामान्य आउटपुट को दूषित कर सकता है। और यहाँ भी, स्क्रिप्ट सिस्टम को गंदी स्थिति में छोड़ सकती है।
- एक PHP सत्र सर्वर पर एक फ़ाइल के रूप में संग्रहीत किया जाता है।
session_start()
पर , स्क्रिप्ट सत्र फ़ाइल को राइट मोड में खोलती है, प्रभावी रूप से उस पर एक विशेष लॉक प्राप्त करती है। बाद के अनुरोध जो समान सत्र का उपयोग करते हैं, लॉक जारी होने तक होल्ड पर रखा जाता है। यह तब होता है जब स्क्रिप्ट समाप्त हो जाती है, जब तक कि आप सत्र को स्पष्ट रूप से बंद नहीं करते।session_write_close()
पर कॉल करें याsession_abort()
जितनी जल्दी हो सके।
दोष:बंद होने पर, सत्र अब और नहीं लिखा जा सकता (जब तक कि आप सत्र को फिर से खोलें , लेकिन यह कुछ हद तक सुरुचिपूर्ण हैक है)। साथ ही स्क्रिप्ट चलती रहती है, संभवतः संसाधनों को बर्बाद कर रही है।
मैं निश्चित रूप से अंतिम विकल्प की सिफारिश करता हूं।