20 de agosto de 2009

PHP: Pausar la ejecución de un script

Aunque os parezca increíble en ocasiones nos interesa que PHP vaya más lento, por ejemplo, a la hora de mostrar el mensaje de login y password erróneo cuando alguien intenta un ataque de fuerza bruta.

¿Cómo podemos hacer que PHP retrase sus respuestas 1 o 2 segundos? Pues con la instrucción sleep().

Os pongo un ejemplo:

<?php
sleep(2); // Se detiene 2 segundos en continuar la ejecución
?>

El valor modificador de sleep debe ser un número entero que determina los segundos de la pausa.

Si queremos hacer la pausa en microsegundos tenemos la instrucción usleep() y si queremos que la pausa se mida en nanosegundos tenemos time_nanosleep().

7 comentarios:

Pepe dijo...

Hola, tengo una pregunta.

Si estoy haciendo una consulta y en el bucle le pongo que se detenga 10 segundos y este bucle se repite 30 veces, el script se tardará 300 segundos.

Si el tiempo de ejecución de php está puesto en 60 segundos, ¿este script se va a completar, o la función sleep(), inicia el contador de nuevo cada diez segundos?

Gracias por la ayuda.

Saludos.

Gabriel Cuesta dijo...

No lo he probado nunca, pero creo que el tiempo de ejecución de Script al ser marcado por el administrador del servidor es un contador de tiempo externo a PHP que no se ve afectado por sleep, por lo que seguramente te daría un mensaje de Time Out y pararía la ejecución.

Pepe dijo...

Gracias, he hecho varias pruebas y aparentemente si funciona, pero no se si realmente reinicia el contador o no.

Saludos

Anónimo dijo...

Parse error: syntax error, unexpected 'sleep' (T_STRING), expecting ',' or ';' in C:\xampp\htdocs\practica\registrarse.php on line 78

eso me dice ami... :(

Sergio Cerotec dijo...

Porque no tienes que poner sleep(). sino sleep(3);

Anónimo dijo...

Hola trabajo con php y sqlserver y cuando realiza una peticion ajax al tardar mas de 60 segundos muestra la peticion como cancelada que puedo hacer para que pueda esperar mas tiempo

Gabriel Cuesta dijo...

Tendrás que revisar la configuración de tiempo de ejecución máximo del script en el servidor en el fichero php.ini o en el fichero .htaccess, depende de la configuración de tu servidor será en uno o en otro.

Utiliza phpinfo(); para ver como tienes configurado el servidor de PHP