PHP bellek sızıntılarına, arabellek taşmasına, yığın taşmasına ve bu türden başka hatalara nasıl neden olabilir? PHP bu tür hatalara bile neden olabilir mi?PHP'nin çökmesine neden oluyor
cevap
Bazı sınırsız tekrarlara neden olarak, PHP çökmesine neden olabilirsiniz.
Örneğin, yinelemeli bir yığın taşmasına neden olmalıdır kendini gerektiren bir dosya:
require __FILE__;
ya da bir nesneyi unserialize gerekiyordu sihirli __sleep()
yöntemde bir özyinelemeye, ancak bunun yerine serialize()
çağırır:
class sleepCrasher
{
public function __sleep()
{
serialize($this);
}
}
serialize(new sleepCrasher());
Ya oluşturur class destructor yeni örneklerini:
yanı sıra bir özyinelemeli
class destructorCrasher
{
public function __destruct()
{
new destructorCrasher();
}
}
// Calling __destruct() manually is just for the sake of example,
// In real scenarios, PHP's garbage collector will crash PHP for you.
(new destructorCrasher())->__destruct();
: PHP karşı korumalıdır diğer özyineleme senaryo vardır
class toStringCrasher
{
public function __tostring()
{
return strval($this);
}
}
strval(new toStringCrasher());
. Örneğin, çıkış koşulu olmadan veya özyinelemeli bir öz üretken jeneratör olmadan bir özyinelemeli işlevi çağırmak. Bunlar bir kazaya neden olmaz, ancak
Allowed memory size of ...
ölümcül bir hatadır.
fazla örnek için, görmek isteyebilirsiniz:
Birini seviyorum: 'shell_exec (" killall -11 httpd "); – p4bl0
Bu adamlar için buna değer umuyoruz otomatik olarak kabul edilen cevap haline gelmiyor, çünkü neredeyse cevap vermiyor soru. Güzel örnek olsa da. –
PHP nedenle tüm php scriptler bellek sızıntıları, tampon taşma ve korunur, bir yorumlama dilidir yığın taşması.
nasıl gibi sorunlarla karşılaşır hiç: Eğer taşar bir sayı çok büyük atarsanız,
Tamsayı taşması ve istisna ortaya çıkar. php.ini'nize yapılandırılmış bellek boyutundan daha fazla bellek kullanarak Bellek yetersiz
,
herhangi bir dilde taşmaları (gibi yinelemeli vb sersemce, cari işlevini çağırarak bellek yeme neden olacak şeyler yapabilir ya .) veya bu işi yapmak için eski bir eski PHP yorumlayıcısına güvenin. how many memory leaks were fixed in PHP5'a bir göz at (Benim favorim: 5.2.6'da bug #44069'u düzeltdiler: '.=
yerine .
kullanarak birleştirme ile büyük bellek kullanımı').
Tek bir http isteği sunmak istiyorsanız, PHP'nin tamamı ok (en fazla) şeklindedir. Ama gerçekten onunla sofistike şeyler yapamazsın (Bir keresinde bir Peer2Peer istemcisini uygulamayı denedim, sunucu sadece 10 dakika sonra bellek kesintisinden öldü) tabii ki benim için bir hata olabilir, ama birkaç gün içinde sızıntı bulmak için harcadım. kendi kodum - boşuna).
Umarım hayır. Bu tür hataları önceden tespit etmeli ve önlemelidir. – Gumbo
http://stackoverflow.com/questions/849549/detecting-memory-leaks-in-large-php-stacks – Pavunkumar
Eğer motorun üzerinde çalışan PHP motoru veya PHP betikleri var mı? –