¿Cuenta el tiempo de sueño para el límite de tiempo de ejecución?


Tengo dos preguntas sobre la función sleep() en PHP:

  1. ¿El tiempo de espera afecta el límite de tiempo máximo de ejecución de mis scripts PHP? A veces, PHP muestra el mensaje "tiempo máximo de ejecución de 30 segundos excedido". ¿Aparecerá este mensaje si utilizo sleep(31)?

  2. ¿Existen riesgos al utilizar la función sleep()? ¿Cuesta mucho rendimiento de CPU?

Author: alex, 2009-04-12

5 answers

Deberías probarlo, solo tienes que tener un script que duerma por más de tu tiempo máximo de ejecución.

<?php
  sleep(ini_get('max_execution_time') + 10);
?>

Spoiler: Bajo Linux, el tiempo de reposo es ignorado, pero bajo Windows, cuenta como tiempo de ejecución.

 81
Author: Samuel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-11 23:09:30

Solo afecta el tiempo del script, no las llamadas al sistema como sleep(). Aparentemente hay un error donde en Windows se incluye sleep (). El tiempo máximo de ejecución es en tiempo real, no tiempo de CPU ni nada por el estilo. Puedes cambiarlo sin embargo:

  • max_execution_time directiva en su php.ini. Este es un escenario global;
  • Usando ini_set() con la directiva anterior. Esto lo cambiará solo para el script actualmente en ejecución solo para eso ejecución;
  • set_time_limit(): también un cambio local.

En cuanto a la diferencia entre los dos últimos, creo que max_execution_time es una cantidad fija. Corriendo:

ini_set('max_execution_time', 60);

Limitará el script a 60 segundos. Si después de 20 segundos llamas:

set_time_limit(60);

El script ahora estará limitado a 20 + 60 = 80 segundos.

 8
Author: cletus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-11 23:13:07

Desde la página PHP sleep () , hay esta nota aportada por el usuario:

Nota: La función set_time_limit() y la directiva de configuración max_execution_time solo afecta a tiempo de ejecución del propio script. Cualquier tiempo dedicado a la actividad que sucede fuera de la ejecución de la script como llamadas al sistema usando system (), la función sleep() , consultas de base de datos, etc. no está incluido al determinar el tiempo máximo que el guión ha sido ejecutar.

 6
Author: karim79,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-11 23:20:27

Otros ya han cubierto los conceptos básicos de sleep() y el límite de tiempo de ejecución del script PHP, pero también debe ser consciente de otro riesgo cuando usa períodos de sueño realmente largos.

Por lo general, cuando un navegador envía una solicitud a un servidor y no recibe ningún dato del servidor, la conexión puede agotarse. Este límite de tiempo depende de las configuraciones del navegador, pero he leído que IE7 tiene un valor predeterminado de solo 30 segundos, mientras que Firefox tiene un valor predeterminado de 115 seconds you puedes comprobar tu propia configuración en Firefox yendo a about:config y filtrando para network.http.mantenlo vivo.timeout (el límite de tiempo se especifica en segundos).

Editar: Tenía las unidades para la red.http.mantenlo vivo.tiempo de espera y navegador.urlbar.búsqueda.tiempo fuera mezclado. De hecho, es en segundos, no décimas de segundo.

 0
Author: Calvin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-25 09:33:22

A) Sí, cuenta para el límite de tiempo(por lo que sleep (31) activará un error)

B) Hace lo contrario de costar el rendimiento de la CPU: permite que otras aplicaciones usen la CPU (cuando una aplicación duerme, el uso de la CPU de esa aplicación estará cerca del 0%). Aparte de quitarle tiempo al usuario, realmente no puedo pensar en ningún riesgo de usar esto.

 -5
Author: v3.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-11 23:10:59