pause - sleep php not working
¿El tiempo de sueño cuenta para el límite de tiempo de ejecución? (5)
Tengo dos preguntas sobre la función sleep()
en PHP:
¿El tiempo de inactividad afecta el límite máximo de tiempo de ejecución de mis scripts PHP? A veces, PHP muestra el mensaje "se excedió el tiempo máximo de ejecución de 30 segundos". ¿Aparecerá este mensaje si uso
sleep(31)
?¿Hay algún riesgo al usar la función
sleep()
? ¿Cuesta mucho rendimiento de la CPU?
Deberías probarlo, solo tienes un script que duerme por más que tu tiempo máximo de ejecución.
<?php
sleep(ini_get(''max_execution_time'') + 10);
?>
Spoiler: en Linux, el tiempo de inactividad se ignora, pero en Windows, cuenta como tiempo de ejecución.
Desde la página PHP sleep () , esta nota contribuida por el usuario:
Nota: La función set_time_limit () y la directiva de configuración max_execution_time solo afectan el tiempo de ejecución del script. No se incluye el tiempo dedicado a la actividad que ocurre fuera de la ejecución del script, como las llamadas al sistema usando system (), la función sleep (), las consultas de bases de datos, etc., al determinar el tiempo máximo que el script se ha estado ejecutando.
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 tener en cuenta otro riesgo al usar 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 expirar. 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 segundos . Puedes verificar tu propia configuración en Firefox yendo a about: config y el filtrado de la red.http.keep-alive.timeout (el límite de tiempo se especifica en segundos).
Editar: Tenía las unidades para network.http.keep-alive.timeout y browser.urlbar.search.timeout mixed up. De hecho, es en segundos, no en décimas de segundo.
Solo afecta el tiempo de secuencia de comandos, no las llamadas al sistema, como sleep (). Aparentemente hay un error que incluye Windows sleep (). El tiempo máximo de ejecución se trata de tiempo real, no de tiempo de CPU o algo así. 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 esa 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á la secuencia de comandos a 60 segundos. Si después de 20 segundos llamas:
set_time_limit(60);
la secuencia de comandos ahora estará limitada a 20 + 60 = 80 segundos.
a) Sí, cuenta hacia el límite de tiempo (por lo que dormir (31) provocará un error)
b) Hace lo contrario de calcular el costo del 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 será cercano al 0%). Además de quitarle tiempo al usuario, realmente no puedo pensar en ningún riesgo de usar esto.