2010-04-20 9 views

उत्तर

3

एक फ़ाइल के निष्पादन के बाद एक "हो गया" ध्वज स्थापित करने और एक बंद समारोह पंजीकृत करने का प्रयास समारोह लागू कि जांच करेगा कि क्या ध्वज परिभाषित किया गया है

+0

बस मुझे इसे हराया - मैं इन उत्तरों के साथ –

+0

के साथ अपना जवाब दोबारा लिख ​​रहा था;) यह अच्छा है, आपका उत्तर अधिक सटीक – shfx

+0

धन्यवाद है! वह चाल है। – AdamA

3

मेरे मूल जवाब काम नहीं करेगा, जैसा कि आप एक गंभीर त्रुटि नहीं पकड़ सकते। यदि आप इसे पढ़ना चाहते हैं, तो संशोधन इतिहास देखें।

मेरा एकमात्र अनुमान यह है कि आप register_shutdown_function का उपयोग कर सकते हैं। स्क्रिप्ट की शुरुआत में एक चर सेट करें, स्क्रिप्ट सफलतापूर्वक पूर्ण होने पर इसे साफ़ करें। एक समारोह है कि उस चर जाँच करता है और यह अगर यह अभी भी सेट पर काम करता है लिखें, तो का उपयोग कर register_shutdown_function

http://php.net/manual/en/function.register-shutdown-function.php

9

पहले दो उत्तरों पढ़ने के बाद, मुझे 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 के त्रुटि आउटपुट को पूरी तरह से अक्षम करना होगा। वैसे भी उत्पादन साइट के लिए सबसे अच्छा अभ्यास कौन सा है।

+0

अधिकतम निष्पादन समय तक पहुंच गया! = अनुमत स्मृति समाप्त हो गई स्क्रिप्ट को लूप और नींद के कार्यों के साथ अधिकतम निष्पादन समय तक पहुंचना मुश्किल है, नींद निष्पादन समय काउंटर फ्रीज ... – shfx

+0

मेरा बुरा। स्मृति थकावट के बजाय निष्पादन समय सीमा का परीक्षण करने के लिए पोस्ट संपादन –

0

यदि एपीआई स्तर से त्रुटि को फँसाने का कोई तरीका नहीं है, तो जब भी कोई घातक त्रुटि होती है, तो PHP इंजन स्मृति को डंप करने में सक्षम होना चाहिए, जैसे कि जब आप 'नीली स्क्रीन' देखते हैं तो विंडोज क्या करता है।

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