Php maximun yürütme zamanı hata yakalama

4 Cevap php

Tuzak PHP bir yol maksimum yürütme zamanı ulaştı ve kullanıcıya daha iyi bir mesaj vermek olduğu ölümcül hata var mı?

4 Cevap

O bayrak tanımlı ise bir dosyanın yürütülmesi ve kontrol edecek bir kapatma işlevi kaydettikten sonra "Bitti" bayrak ayarlamayı deneyin

Burada ilk iki cevapları okuduktan sonra, ben register_shutdown_function() kendimi test etmek vardı - Ben çalıştırmak sanmıyordum. Sonuçta, nasıl bir kullanıcı fonksiyon kez orada daha fazla bellek, ya da yürütme zamanı geçtikten çalıştırabilirsiniz? Ben bu kapatma fonksiyonları do çalıştırmak, hatta bir OOM durumda, ya da yürütme zamanı exceded olmuştur öğrenmek için sürpriz oldu. Kavramının kanıtı:

Bellek sınırını test etmek için:

<?php
function asdf() { echo "omg\n"; }
register_shutdown_function('asdf');

ini_set('memory_limit', '1000');

$x = '';
while(true) {
 $x .= 'lkajsdlfkjasldkfjlaskdfjasldkfj';
}

Çıktı:

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

Yürütme süresini test etmek için:

cat scratch.php
<?php
function asdf() { echo "omg\n"; }
register_shutdown_function('asdf');

set_time_limit(1);

while(true) {}

Çıktı:

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

Mesajınız before PHP'nin hata çıktısı, tamamen PHP'nin hata çıktı devre dışı olurdu görüntü almak için, unutmayın. Zaten bir üretim yeri için en iyi uygulama hangisi.

Yine de okumak istiyorsanız My original answer won't work, as you can't catch a fatal error., revizyon geçmişini kontrol.

Benim tek tahminim kullanabilirsiniz olduğunu register_shutdown_function. Komut başarıyla tamamlandığında, temizlemek, yazısının başında bir değişken ayarlayın. Hala set eğer üzerinde değişken ve eylemler, daha sonra register_shutdown_function kullanarak işlevini geçerli olduğunu denetleyen bir fonksiyon yazın

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

Tuzak hiçbir şekilde API düzeyinde bir hata varsa, PHP motoru ölümcül bir hata 'mavi ekran' gördüğünüzde, Windows ne gibi oluşunca hdd üzerindeki bellek dökümü gerekir.