क्या अधिकतम निष्पादन समय तक पहुंचने पर उपयोगकर्ता को एक बेहतर संदेश देने पर PHP में घातक त्रुटि को फँसाने का कोई तरीका है?PHP अधिकतम निष्पादन समय त्रुटि फँसाने
उत्तर
एक फ़ाइल के निष्पादन के बाद एक "हो गया" ध्वज स्थापित करने और एक बंद समारोह पंजीकृत करने का प्रयास समारोह लागू कि जांच करेगा कि क्या ध्वज परिभाषित किया गया है
मेरे मूल जवाब काम नहीं करेगा, जैसा कि आप एक गंभीर त्रुटि नहीं पकड़ सकते। यदि आप इसे पढ़ना चाहते हैं, तो संशोधन इतिहास देखें।
मेरा एकमात्र अनुमान यह है कि आप register_shutdown_function
का उपयोग कर सकते हैं। स्क्रिप्ट की शुरुआत में एक चर सेट करें, स्क्रिप्ट सफलतापूर्वक पूर्ण होने पर इसे साफ़ करें। एक समारोह है कि उस चर जाँच करता है और यह अगर यह अभी भी सेट पर काम करता है लिखें, तो का उपयोग कर register_shutdown_function
http://php.net/manual/en/function.register-shutdown-function.php
पहले दो उत्तरों पढ़ने के बाद, मुझे register_shutdown_function()
स्वयं परीक्षण करना पड़ा - मुझे नहीं लगता था कि यह दौड़ जाएगा। आखिरकार, कोई और मेमोरी नहीं होने पर उपयोगकर्ता कैसे काम कर सकता है, या निष्पादन का समय समाप्त हो गया है? मुझे यह जानकर आश्चर्य हुआ कि शटडाउन फ़ंक्शंस रन, ओओएम स्थिति में भी, या जब निष्पादन समय समाप्त हो गया है। अवधारणा का सबूत:
स्मृति सीमा का परीक्षण करने के लिए:
<?php
function asdf() { echo "omg\n"; }
register_shutdown_function('asdf');
ini_set('memory_limit', '1000');
$x = '';
while(true) {
$x .= 'lkajsdlfkjasldkfjlaskdfjasldkfj';
}
आउटपुट:
cat scratch.php
<?php
function asdf() { echo "omg\n"; }
register_shutdown_function('asdf');
set_time_limit(1);
while(true) {}
आउटपुट::
PHP Fatal error: Maximum execution time of 1 second exceeded in /home/scratch.php on line 7
PHP Stack trace:
PHP 1. {main}() /home/scratch.php:0
Fatal error: Maximum execution time of 1 second exceeded in /home/scratch.php on line 7
Call Stack:
0.0002 80200 1. {main}() /home/scratch.php:0
omg
PHP Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 169540 bytes) in /home/scratch.php on line 9
PHP Stack trace:
PHP 1. {main}() /home/scratch.php:0
Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 169540 bytes) in /home/scratch.php on line 9
Call Stack:
0.0002 81360 1. {main}() /home/scratch.php:0
omg
निष्पादन समय परीक्षण करने के लिए
ध्यान दें कि PHP के त्रुटि आउटपुट से पहले अपना संदेश प्राप्त करने के लिए, आपको PHP के त्रुटि आउटपुट को पूरी तरह से अक्षम करना होगा। वैसे भी उत्पादन साइट के लिए सबसे अच्छा अभ्यास कौन सा है।
अधिकतम निष्पादन समय तक पहुंच गया! = अनुमत स्मृति समाप्त हो गई स्क्रिप्ट को लूप और नींद के कार्यों के साथ अधिकतम निष्पादन समय तक पहुंचना मुश्किल है, नींद निष्पादन समय काउंटर फ्रीज ... – shfx
मेरा बुरा। स्मृति थकावट के बजाय निष्पादन समय सीमा का परीक्षण करने के लिए पोस्ट संपादन –
यदि एपीआई स्तर से त्रुटि को फँसाने का कोई तरीका नहीं है, तो जब भी कोई घातक त्रुटि होती है, तो PHP इंजन स्मृति को डंप करने में सक्षम होना चाहिए, जैसे कि जब आप 'नीली स्क्रीन' देखते हैं तो विंडोज क्या करता है।
बस मुझे इसे हराया - मैं इन उत्तरों के साथ –
के साथ अपना जवाब दोबारा लिख रहा था;) यह अच्छा है, आपका उत्तर अधिक सटीक – shfx
धन्यवाद है! वह चाल है। – AdamA