2009-09-15 15 views
8

मैं एक PHP स्क्रिप्ट कैसे लिखूं जो चल रहा है, कुछ पाठ को फ़्लश करने और HTTP अनुरोध को समाप्त करने के बाद भी? क्या यह संभव है?HTTP अनुरोध समाप्त करने के बाद एक PHP स्क्रिप्ट चलाना जारी रख सकता है?

+0

[पीएचपी पृष्ठभूमि प्रक्रियाओं] से जवाब देखें (http://stackoverflow.com/questions/265073/php-background-processes) – drfloob

उत्तर

5

हमेशा के लिए PHP अनुप्रयोग चलाने के लिए या php जब तक समाप्त हो जाता है

ignore_user_abort(true); 

set_time_limit(0); 
+0

असुरक्षित लगता है यदि पृष्ठ अक्सर अनुरोध किया जाता है, तो सर्वर में बड़ी संख्या में प्रक्रियाएं हो सकती हैं जो कुछ भी नहीं कर रही हैं। – rsman

4

आप ignore_user_abort विन्यास निर्देश द्वारा रुचि हो सकती है, और/या ignore_user_abort समारोह:

सेट करती है कि एक ग्राहक डिस्कनेक्ट कारण चाहिए एक स्क्रिप्ट निरस्त किया जाना है।

इस का उपयोग करते हुए आप:

  • पेज flush और/या ob_flush
  • कॉल ignore_user_abort साथ, ब्राउज़र
  • फ्लश उत्पादन के लिए भेजा जाना है का हिस्सा उत्पन्न (या तो अब या पहले)
  • कुछ और काम करें

उपयोगकर्ता के ब्राउज़र शायद अभी भी "इंतज़ार कर" या "लोड हो रहा है" का संकेत देगा, लेकिन पृष्ठ की सामग्री लोड किया जाएगा और दिखाया गया है - और उपयोगकर्ता प्रेस "बंद करो", अपनी स्क्रिप्ट इसके निष्पादन जारी रखना चाहिए, भले ही।

अधिक जानकारियां के लिए, वहाँ है कि समारोह के मैनुअल के पृष्ठ पर एक उदाहरण है - और आप इस लेख पर एक नज़र ले जा सकते हैं: How to Use ignore_user_abort() to Do Processing Out of Band


बेशक , जबकि इस कुछ प्रकाश की प्रक्रिया के लिए इस्तेमाल किया जा सकता (तरह एक पृष्ठ के अंत में सामान "सफाई", जबकि उपयोगकर्ता के रूप में तेजी से संभव के रूप में यह प्रदर्शित), आप अभी भी max_execution_time और पसंद के आधार पर सीमित कर दिया जाएगा।

तो, यह एक समाधान है कि लंबी/भारी गणना के लिए इस्तेमाल किया जाना चाहिए नहीं है।

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