Wie kann PHP Speicherlecks, Pufferüberläufe, Stacküberläufe und andere Fehler dieser Art verursachen? Kann PHP überhaupt solche Fehler verursachen?PHP zum Absturz bringen
Antwort
Durch eine Art unendliche Rekursion können Sie einen PHP-Absturz verursachen.
Zum Beispiel kann eine Datei, die sich selbst rekursiv erfordert sollte einen Stapelüberlauf verursachen:
require __FILE__;
Oder eine Rekursion in der magischen __sleep()
Methode, die ein Objekt deserialisieren soll, fordert jedoch serialize()
statt:
class sleepCrasher
{
public function __sleep()
{
serialize($this);
}
}
serialize(new sleepCrasher());
Oder ein class destructor, die neue Instanzen erstellt:
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();
Neben einer rekursiven __toString()
:
class toStringCrasher
{
public function __tostring()
{
return strval($this);
}
}
strval(new toStringCrasher());
Es gibt andere Szenarien, die Rekursion PHP gegen geschützt ist. Zum Beispiel den Aufruf einer rekursiven Funktion ohne Exit-Bedingung oder eines rekursiven Generatorgenerators. Diese verursachen keinen Absturz, aber einen schwerwiegenden Fehler Allowed memory size of ...
.
Weitere Beispiele könnten Sie sehen:
Liebe, dass: 'Shell_Exec (" killall -11 httpd ");' – p4bl0
Ich hoffe für diese Jungs wert wird dies nicht die automatisch angenommene Antwort, weil es kaum beantwortet Frage. Nettes Beispiel obwohl. –
PHP ist eine interpretierte Sprache, so dass alle PHP-Skripte von Speicherlecks geschützt sind, Pufferüberlauf und Paketüberfluss.
Wie auch immer Sie Probleme als solche verwendet werden:
Integer Überlauf, wenn Sie eine Nummer zu groß zuweisen es überläuft, und da keine Ausnahme auftreten.
Nicht genügend Arbeitsspeicher, mehr Speicher als Speichergröße konfiguriert in der php.ini mit
Sie können entweder die Dinge tun, die überläuft in jeder Sprache (wie rekursiv Aufruf der aktuellen Funktion verursachen würde, gedankenlos Speicher Essen, etc .) oder sich auf den guten alten PHP-Interpreter verlassen, um diese Aufgabe zu erledigen. Werfen Sie einen Blick auf how many memory leaks were fixed in PHP5 (Mein Favorit: In 5.2.6 behoben bug #44069: 'Große Speicherverbrauch mit Verkettung mit .
anstelle von .=
').
Alles in allem ist PHP ok (höchstens), wenn Sie nur eine einzige HTTP-Anfrage bedienen möchten. Aber man kann nicht wirklich ausgefeilte Sachen damit machen (ich habe einmal versucht, einen Peer2Peer Client zu implementieren, der Server ist nach nur 10 Minuten an Speichermangel gestorben - könnte natürlich ein Fehler für mich sein, aber ich hatte mehrere Tage damit verbracht, Lücken zu finden mein eigener Code - ohne Erfolg.
- 1. Was könnte einen dynamischen_cast zum Absturz bringen?
- 2. Was könnte VS2008 zum Absturz bringen und dann explorer.exe mitnehmen?
- 3. Ich kann einen gen_server nicht durch Absturz von einem spawn_linked-Prozess zum Absturz bringen
- 4. Netfilter in Kernel-Modul bewirkt, dass mein System zum Absturz bringen
- 5. -Setup nginx nicht zum Absturz bringen, wenn Host in Upstream nicht
- 6. Warum würde der Aufruf von Calloc'ed Memory mein VC6-Projekt zum Absturz bringen?
- 7. Sollte ein fehlerhaftes USB-Gerät einen fehlerfreien Linux-Kernel zum Absturz bringen?
- 8. Server zum Absturz bringen nach meinem Python-Skript starten zu arbeiten
- 9. Wie kann ich Genymotion beim Start in OSX nicht zum Absturz bringen?
- 10. Was ist der beste Weg, um absichtlich meine Windows-Anwendung zum Absturz zu bringen?
- 11. Speicherprobleme, die mein c-Programm zum Absturz bringen, aber es stürzt beim Debuggen nicht ab?
- 12. C++: Sollte ich alle Ausnahmen abfangen oder das Programm zum Absturz bringen?
- 13. PHP Regex Absturz Apache
- 14. einschließlich XML in der Seite, die PHP zum Absturz bringt
- 15. AsyncTask-Erstellung führt zum Absturz
- 16. Navigation verursacht App zum Absturz
- 17. IKImageView verursacht App zum Absturz
- 18. glänzend Ursachen RStudio zum Absturz
- 19. getBoundingClientRect() verursacht Javascript zum Absturz?
- 20. Interop verursacht Unity zum Absturz
- 21. Struktur verursacht Programm zum Absturz
- 22. Wie Sie Ihre Kunden zum Testen bringen
- 23. Versuche, geschützte Blöcke zum Arbeiten zu bringen
- 24. ini_set ('memory_limit') verursacht PHP Absturz
- 25. AVL Tree Deletion verursacht Programm zum Absturz
- 26. Konnte nicht index.php als Standardseite Anwendungen zum Scheitern bringen?
- 27. setRequestedOrientation, bevor ProgressDialog zum Absturz führt
- 28. App, die zum Absturz mit FormsAppCompatActivity führt
- 29. Einfache Möglichkeit zum Absturz von VB.NET Programm
- 30. Flask POST-Anfrage verursacht Server zum Absturz
Hoffentlich nicht. Es sollte solche Fehler erkennen und vermeiden, bevor sie auftreten. – Gumbo
http://StackOverflow.com/Questions/849549/detecting-memory-leaks-in-Large-php-stacks – Pavunkumar
Meinst du PHP die Engine oder PHP-Skripte auf der Engine laufen? –