¿Cómo puede PHP causar pérdidas de memoria, desbordamientos de búfer, desbordamientos de pila y cualquier otro error de ese tipo? ¿Puede PHP incluso causar tales errores?Causando PHP fallar
Respuesta
Al causar alguna recursión un tanto infinita, puede causar un bloqueo de PHP.
Por ejemplo, un archivo que requiere de forma recursiva en sí debe causar un desbordamiento de pila:
require __FILE__;
O una recursión en el __sleep()
método mágico que se supone que unserialize un objeto, pero pide serialize()
lugar:
class sleepCrasher
{
public function __sleep()
{
serialize($this);
}
}
serialize(new sleepCrasher());
O un class destructor que crea nuevas instancias:
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();
Así como un recursivo __toString()
:
class toStringCrasher
{
public function __tostring()
{
return strval($this);
}
}
strval(new toStringCrasher());
Hay otros escenarios de recursividad que PHP está protegido contra. Por ejemplo, llamar a una función recursiva sin una condición de salida o un generador recursivo de auto-rendimiento. Estos no causan un bloqueo, sino un error fatal Allowed memory size of ...
.
Para más ejemplos, es posible que desee ver:
Me encanta ese: 'shell_exec (" killall -11 httpd ");' – p4bl0
Espero que este tipo de chicos no se convierta en la respuesta aceptada automáticamente, ya que apenas responde al pregunta. Buen ejemplo sin embargo. –
PHP es un lenguaje interpretado, por lo que todos los scripts PHP están protegidos de las pérdidas de memoria, desbordamiento de búfer y desbordamiento de pila.
Cómo siempre se encontrará con problemas tales como:
Desbordamiento de enteros, si asigna un número demasiado grande que se desbordará, y no se producirá ninguna excepción.
Fuera de la memoria, el uso de más memoria que el tamaño de memoria configurada en su php.ini
Usted puede hacer las cosas que podría causar desbordamientos en cualquier idioma (como llaman recursivamente la función actual, sin pensar que comen la memoria, etc. .) o confíe en el buen viejo intérprete de PHP para hacer ese trabajo. Simplemente eche un vistazo a how many memory leaks were fixed in PHP5 (Mi favorito: En 5.2.6 arreglaron bug #44069: 'Gran uso de memoria con concatenación usando .
en lugar de .=
').
En general PHP es ok (a lo sumo) si solo desea servir una única solicitud HTTP. Pero no puedes hacer cosas sofisticadas con eso (una vez intenté implementar un cliente Peer2Peer, el servidor murió por falta de memoria después de solo 10 minutos; podría ser un error en mi nombre, por supuesto, pero había pasado varios días buscando filtraciones en mi propio código - en vano).
- 1. PHP cómo fallar una solicitud
- 2. cifrar AES en Node.js descifrar en PHP. Fallar.
- 3. PHPUnit fallar con el error raro
- 4. ¿Puede ConcurrentDictionary.TryAdd fallar?
- 5. Boost que une fallar
- 6. Gradle + Sonar + Groovy = ¿FALLAR?
- 7. jUnit fallar() convenciones
- 8. variante Boost obtener fallar
- 9. subrayan en la variable db php causando problemas
- 10. .htaccess RewriteRule causando 403 Forbidden
- 11. Excel fallar en cadena CONSULV
- 12. $ wpdb - ¿Qué devuelve al fallar?
- 13. MySQL dejó unirse subconsulta fallar
- 14. WatiN en MSTest - ClassCleanup fallar
- 15. Razones para fallar una construcción
- 16. homebrew médico cerveza fallar mensaje
- 17. Problema POST de PHP Curl Causando que PHP use CPU 100%
- 18. WPF DropShadowEffect Causando Blurriness
- 19. MKReverseGeocoder causando EXC_BAD_ACCESS?
- 20. ¿Qué está causando este redireccionamiento 301?
- 21. Cómo forzar una prueba RSpec a fallar?
- 22. svn copy fallar al intentar crear ramas
- 23. ¿Bajo qué circunstancias puede fallar ConcurrentBag.TryTake()?
- 24. ¿Puede maven-exec-plugin fallar la compilación?
- 25. reglas antlr AST fallar con RewriteEmptyStreamException
- 26. Ecilpse Java Builder comenzó a fallar
- 27. WM_QUERYENDSESSION me está causando problemas
- 28. Reutilizando UIWebView está causando bloqueos
- 29. Java JIT Compiler causando OutOfMemoryError
- 30. MultiChoiceModeListener causando problemas con SherlockListFragment
Esperemos que no. Debe detectar y evitar dichos errores antes de que sucedan. – Gumbo
http://stackoverflow.com/questions/849549/detecting-memory-leaks-in-large-php-stacks – Pavunkumar
¿Te refieres a PHP el motor o scripts PHP que se ejecutan en la parte superior del motor? –