Foros del Web » Programando para Internet » PHP »

Validar memory_limit

Estas en el tema de Validar memory_limit en el foro de PHP en Foros del Web. Como puedo manejar la excepción cuando sobrepasa un script sobrepasa el limite de memoria asignado ?? Se pudiera crear algo asi como un Listener??? es ...
  #1 (permalink)  
Antiguo 09/02/2012, 12:55
 
Fecha de Ingreso: mayo-2011
Mensajes: 10
Antigüedad: 13 años, 6 meses
Puntos: 3
Validar memory_limit

Como puedo manejar la excepción cuando sobrepasa un script sobrepasa el limite de memoria asignado ?? Se pudiera crear algo asi como un Listener??? es decir, que si sobrepasa la memoria asignada, genere el evento y devuelva un mensaje de error? Agradezco sus respuestas.

PD: Ya sé que se puede incrementar el memory_limit, pero no es la idea...la idea es manejar la excepción.
  #2 (permalink)  
Antiguo 09/02/2012, 13:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Validar memory_limit

Si el error que provoca es fatal no hay forma de recuperarlo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 09/02/2012, 13:06
 
Fecha de Ingreso: mayo-2011
Mensajes: 10
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: Validar memory_limit

Cita:
Iniciado por pateketrueke Ver Mensaje
Si el error que provoca es fatal no hay forma de recuperarlo.
Lanza el tipico warning de "Allowed memory size bla bla bla... Try to allocate...." La idea es manejarlo uno mismo... y hacer algo al respecto, en este caso es una generacion de archivo excel, mediante un descarga forzada. El excel tendrá demasiados registros (50.000 - 100.000 - 200.000), por lo cual la descarga no se lanza por pantalla, ya que se genera ese warning por debajo y termina la ejecución del script, sin devolver nada, ya que no se puede controlar esa excepción (al parecer).
  #4 (permalink)  
Antiguo 09/02/2012, 13:30
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Validar memory_limit

En caso de que el script se detenga de esa manera puedes buscar si el último error es Allowed memory size y hacer algo usando la función register_shutdown_function, pero como es fatal no se puede capturar con una excepción.

Código PHP:
Ver original
  1. <?php
  2.  
  3. function () {
  4.     $error = error_get_last();
  5.     if (strstr($error['message'], 'Allowed memory size')) {
  6.         echo $error['message'];
  7.       //hago algo...
  8.     }
  9. });
  10.  
  11. //Genera el error Fatal error: Allowed memory size
  12.  
  13. while (true) {
  14.     $data .= str_repeat('#', PHP_INT_MAX);
  15. }
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 09/02/2012, 13:50
 
Fecha de Ingreso: mayo-2011
Mensajes: 10
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: Validar memory_limit

Cita:
Iniciado por andresdzphp Ver Mensaje
En caso de que el script se detenga de esa manera puedes buscar si el último error es Allowed memory size y hacer algo usando la función [URL="http://www.php.net/manual/es/function.register-shutdown-function.php"]register_shutdown_function[/URL], pero como es fatal no se puede capturar con una excepción.

Código PHP:
Ver original
  1. <?php
  2.  
  3. function () {
  4.     $error = error_get_last();
  5.     if (strstr($error['message'], 'Allowed memory size')) {
  6.         echo $error['message'];
  7.       //hago algo...
  8.     }
  9. });
  10.  
  11. //Genera el error Fatal error: Allowed memory size
  12.  
  13. while (true) {
  14.     $data .= str_repeat('#', PHP_INT_MAX);
  15. }
Ingeniosa solución. No conocia esa función. Muchisimas Gracias!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:05.