2012-08-17 15 views
21

Tengo un problema con mi archivo PHP que tarda más de 30 segundos en ejecutarse.php timeout - set_time_limit (0); - no funciona

Después de la búsqueda, agregué set_time_limit(0); al comienzo del código, pero el archivo aún excede el tiempo con 500 error después de 30 segundos.

log: PHP Fatal error: Maximum execution time of 30 seconds exceeded in /xxx/xx/xxx.php 

safe-mode : off 
+4

¿Estás en alojamiento compartido? las funciones php pueden ser selectivamente deshabilitadas/restringidas por la configuración del servidor. –

+1

¿puede 'echo ini_get ('max_execution_time');' después de su 'set_time_limit (0);' y decir lo que obtienes? – Prasanth

+0

Puede haber 'php_admin_value max_execution_time XX' establecido en httpd.conf. Entonces no puedes anular este valor. – verybadbug

Respuesta

21

Comprobar el php.ini

ini_set('max_execution_time', 300); //300 seconds = 5 minutes 

ini_set('max_execution_time', 0); //0=NOLIMIT 
+3

También entiendo que, como dijo Marc B., puede haber restricciones establecidas en un host compartido, por lo que si estas funciones no funcionan como deberían, pregunte a algún administrador del servidor –

+0

@Marc B No, estoy en servidor dedicado – user614963

+1

@goldenparrot echo ini_get ('max_execution_time'); = 0 – user614963

2
ini_set('max_execution_time', 300); 

uso de este

1

Pedido esto, Esto es de PHP MANUAL, esto puede ayudarle.

Si está utilizando PHP_CLI SAPI y obtiene el error "Se excedió el tiempo máximo de ejecución de N segundos" donde N es un valor entero, intente llamar a set_time_limit (0) cada M segundos o cada iteración. Por ejemplo:

<?php 

require_once('db.php'); 

$stmt = $db->query($sql); 

while ($row = $stmt->fetchRow()) { 
    set_time_limit(0); 
    // your code here 
} 

?> 
+0

Espera ... ¿Qué? ¿No?'set_time_limit()': A) Restablece el temporizador en cada llamada (bien, y veo a dónde iba). B) no impone límite de tiempo cuando se establece con 0. Entonces ... No ... – Mike

+0

Esto debe marcarse como la respuesta correcta. Lo más probable es que use bucles y el comando set_time_limit (0) debería estar en la parte superior del bucle que causa el tiempo de espera. El parámetro 0 significa que no se impondrá límite de tiempo (según el manual), por lo tanto, el script puede ejecutarse hasta su finalización. Sin embargo, si su script tarda más de 30 segundos en ejecutarse, tal vez desee reconsiderar cómo está haciendo las cosas. – kurdtpage

3

lo general el uso set_time_limit (30) dentro del bucle principal (por lo que cada iteración del bucle se limita a 30 segundos en lugar de todo el guión).

Lo hago en varias secuencias de comandos de actualización de base de datos, que habitualmente tardan varios minutos en completarse pero menos de un segundo en cada iteración; mantener el límite de 30 segundos significa que la secuencia de comandos no se quedará atrapada en un ciclo infinito si soy estúpido lo suficiente para crear uno.

Debo admitir que mi elección de 30 segundos para el límite es un tanto arbitraria - mis scripts en realidad podrían salir con 2 segundos, pero me siento más cómodo con 30 segundos dada la aplicación real - por supuesto podrías usar cualquier valor que sientes que es adecuado.

Espero que esto ayude!

5

Este es un hilo viejo, pero pensé que publicaría este link, ya que me ayudó bastante en este tema. Esencialmente, lo que está diciendo es que la configuración del servidor puede anular la configuración de php. Del artículo:

Por ejemplo, mod_fastcgi tiene una opción llamada "-idle-timeout" que controla el tiempo de inactividad del script. Entonces, si la secuencia de comandos no genera ningún resultado para el controlador de fastcgi durante tantos segundos, fastcgi lo rescindirá. La configuración es algo como esto:

Apache <-> mod_fastcgi <-> php processes 

El artículo tiene otros ejemplos y explicaciones adicionales. Espero que esto ayude a alguien más.