2009-09-15 17 views
10

PHP स्क्रिप्ट continue executing after the HTTP page request कर सकते हैं, तो आखिर में जब मैं इसके साथ काम कर रहा हूं तो मैं इसे निष्पादित कैसे कर सकता हूं?क्या एक PHP स्क्रिप्ट स्वयं निरस्त हो सकती है या गर्भपात का पता लगा सकती है?

साथ ही, क्या यह पता लगाने के लिए कोई घटना है कि ओएस जबरन स्क्रिप्ट को रद्द करने जा रहा है? या max_execution_time भविष्यवाणी करने के लिए मैं एक आंतरिक टाइमर कैसे रखूं?

उत्तर

5

आप स्क्रिप्ट निष्पादन के अंत में एक फ़ंक्शन को कॉल करने के लिए register_shutdown_function का उपयोग कर सकते हैं। आप इसका उपयोग यह पता लगाने के लिए कर सकते हैं कि स्क्रिप्ट को समाप्त कर दिया गया है और कार्यों का एक निश्चित सेट निष्पादित करता है।

+0

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

8

exit()/die() एक PHP स्क्रिप्ट को रोक देगा।

स्क्रिप्ट को कब रोकना है, यह जानने के लिए, आपको टाइमर के रूप में microtime का उपयोग करना होगा और अधिकतम निष्पादन समय के निरंतर (या php.ini फ़ाइल से प्राप्त करना) के रूप में सहेजना होगा।

आप Connection handling जानकारी भी देख सकते हैं। जहां हमारे पास connection_aborted() और connection_status()

जैसी चीजें हैं लेकिन आप जिस समस्या को हल करने की कोशिश कर रहे हैं?

1

ठीक है, आप $start=microtime(true) शुरू कर सकते हैं जो एक टाइमस्टैम्प वापस करेगा। फिर आप microtime(true) की जांच कर सकते हैं और निष्पादन के बाद सेकंड की संख्या प्राप्त करने के लिए अपने प्रारंभ समय से घटा सकते हैं।

लेकिन नहीं, आप स्क्रिप्ट को "पकड़" नहीं सकते क्योंकि यह अनुरोध लंबे समय से अनुरोध के कारण समाप्त हो रहा है। आप शटडाउन हैंडलर में कुछ आखिरी मिनट की चीज़ें करने का प्रयास कर सकते हैं, लेकिन मुझे यकीन नहीं है कि PHP इसका सम्मान करेगा या नहीं।

ऐसा लगता है कि एक ऐसा कार्य होता है जो आप चाहते हैं, connection_timeout(), लेकिन इसे हटा दिया गया और हटा दिया गया। हालांकि, इसके लिए कोई प्रतिस्थापन नहीं है, तो पता नहीं है।

2

आप pcntl-alarm पर एक नज़र डालना चाहते हैं जो एक स्क्रिप्ट को स्वयं को संकेत भेजने की अनुमति देता है। ओएस द्वारा भेजे जा सकने वाले हत्या संकेतों को पकड़ने के तरीके पर कुछ नमूना भी शामिल है। और वास्तव में मर जाते हैं।

4

आपका अनुरोध बंद होने पर इस समय कॉलबैक प्राप्त करने के लिए, register_shutdown_function(myfunction) का उपयोग करें।

अधिकांश पॉज़िक्स वातावरण की तरह, PHP signal handlers का भी समर्थन करता है। आप SIGTERM ईवेंट के लिए अपना खुद का हैंडलर पंजीकृत कर सकते हैं।

function my_abort_handler($signo) { 
    echo "Aborted"; 
} 

pcntl_signal(SIGTERM, "my_abort_handler"); 
संबंधित मुद्दे

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