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ı?
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