¿Qué es un uso práctico de PHP sleep()?

Yo sólo tenía una mirada a los documentos en sleep().

Donde se use esta función?

Está allí para dar la CPU de una ruptura en una función costosa?

Cualquier de los errores más comunes?

InformationsquelleAutor alex | 2010-10-14

13 Kommentare

  1. 47

    Un lugar donde se encuentra su uso es crear un retraso.

    Digamos que usted ha construido un rastreador que utiliza curl/file_get_contents para obtener páginas remotas. Ahora usted no quiere bombardear el servidor remoto con demasiadas solicitudes en poco tiempo. Para introducir un retardo entre consecutivos solicitudes.

    sleep toma el argumento en cuestión de segundos, su amigo usleep toma argumentos en microsegundos y es más adecuado en algunos casos.

    • Lo único en lo que podía pensar demasiado, a menos que uno está usando php para otras cosas que tener en un servidor web.
    • De manera más general: la limitación de las solicitudes, tanto entrantes como salientes.
    • Yo uso sleep después de subir un archivo a un servidor para asegurarse de que los archivos se cargan completamente. Sin ella, el guión sería un fracaso.
    • el sueño devuelve 0 para comprobar si tiene éxito, pero usleep no decir nada. Sólo el pensamiento de hacerlo ! Antes de utilizar cualquier cosa xD
  2. 28

    Otro ejemplo: Usted está ejecutando algún tipo de proceso por lotes que hace un uso intensivo de los recursos. Tal vez usted está caminando a la base de datos de 9.000.000 los títulos de los libros y la actualización de alrededor del 10% de ellos. Ese proceso tiene que ejecutar en la mitad del día, pero hay tantas actualizaciones para hacer que la ejecución de su programa de proceso por lotes arrastra el servidor de base de datos a arrastrarse por otros usuarios.

    Para modificar el proceso por lotes para presentar, digamos, 1000 actualizaciones, sleep durante 5 segundos para darle el servidor de bases de datos una oportunidad para terminar el procesamiento de las solicitudes de otros usuarios que lo han respaldado.

  3. 23

    He aquí un fragmento de ¿cómo puedo usar sleep en uno de mis proyectos:

    foreach($addresses as $address)
    {
      $url = "http://maps.google.com/maps/geo?q={$address}&output=json...etc...";
      $result = file_get_contents($url);
      $geo = json_decode($result, TRUE);
    
      //Do stuff with $geo
    
      sleep(1);
    }

    En este caso sleep me ayuda a evitar ser bloqueado por Google maps, porque yo estoy enviando demasiadas peticiones al servidor.

  4. 9

    Vieja pregunta, lo sé, pero otra razón para usar u/sueño puede ser cuando usted está escribiendo la seguridad/de la criptografía de código, tales como la autenticación de secuencia de comandos. Un par de ejemplos:

    1. Usted desea, puede reducir la eficacia de un potencial ataque de fuerza bruta haciendo su script de inicio de sesión deliberadamente lento, especialmente después de un par de intentos fallidos.
    2. También se podría añadir un retardo artificial durante el cifrado para mitigar sincronización de los ataques. Sé que las posibilidades son escasas que va a ser escrito en la profundidad de cifrado de código en un lenguaje como PHP, pero aún válidos, creo.

    EDITAR

    Con u/dormir en contra de la sincronización de los ataques no es una buena solución. Usted todavía puede obtener los datos importantes en un tiempo de ataque, sólo se necesita más muestras para filtrar el ruido que u/sueño, añade.

    Usted puede encontrar más información sobre este tema en: Podría aleatorio sueño prevenir la sincronización de los ataques?

    • Esta no es la mejor práctica para la prevención de estos tipos de ataques. Esto hace que el script para permanecer en la ejecución, teniendo en la memoria y los recursos. Es mejor implementar un cliente del lado del retraso en la aplicación y, a continuación, automáticamente se cierran a cabo las solicitudes que no respeten la demora. En el lado del servidor retraso proporciona un fácil de vectores de ataques DOS. Artificial los retrasos no son las mejores prácticas para la prevención de la sincronización de los ataques, ya sea: el uso de la sincronización segura funciones de comparación, es más seguro y, a menudo, utiliza menos recursos.
    • Re: tiempo de los ataques de ver la respuesta dada por ircmaxell en la página que enlaza a sobre el azar de sueño para evitar la sincronización de los ataques, que explica mi punto acerca de los ataques en detalle.
  5. 1

    Puede utilizar sueño para detener la ejecución del script… por ejemplo para retrasar un AJAX llamada por el lado del servidor o implementar un observador. También se puede utilizar para simular retrasos.

    La utilizo también para retrasar sendmail() & co. .

    Alguien utiliza usar sleep() para evitar que DoS y de inicio de sesión brutefoces, no estoy de acuerdo, porque en esto es necesario agregar algunas comprobaciones para evitar que el usuario que ejecuta varias veces.

    Comprobar también usleep.

  6. 1

    Tenía que usarlo hace poco, cuando yo estaba utilizando Google API de Geolocalización. Cada dirección en un bucle necesario llamar a un servidor de Google por lo que es necesario un poco de tiempo para recibir una respuesta. He utilizado usleep(500000) a dar todo lo que conlleva bastante tiempo.

  7. 1

    No me suele usarse para servir páginas web, pero es muy útil para la línea de comandos de secuencias de comandos.

    $ready = false;
    do {
      $ready = some_monitor_function();
      sleep(2);
    } while (!$ready);
  8. 1

    Super viejos postes, pero pensé que sería un comentario así.
    Hace poco he tenido que comprobar un MUY largo proceso en ejecución que crea algunos archivos. Así que he hecho una función que itera a través de una curvatura de la función. Si el archivo que yo estoy buscando no existe, en la que dormir en el archivo php, y comprobar de nuevo en un poco:

    function remoteFileExists() {
        $curl = curl_init('domain.com/file.ext');
    
        //don't fetch the actual page, you only want to check the connection is ok
        curl_setopt($curl, CURLOPT_NOBODY, true);
    
        //do request
        $result = curl_exec($curl);
    
        //if request did not fail
        if ($result !== false) {
            //if request was ok, check response code
            $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);  
    
            if ($statusCode == 404) {
                  sleep(7);
                  remoteFileExists();
            }
            else{
                echo 'exists'; 
            }
        }
    
        curl_close($curl);
    
    }
    
    echo remoteFileExists();
  9. 1

    Otra forma de utilizar: si desea ejecutar un cronjob más a menudo cada minuto. Yo uso el siguiente código para este:

    sleep(30);
    include 'cronjob.php';

    Yo llamo a este archivo, y cronjob.php cada minuto.

  10. 1

    Esto es un poco de un extraño caso de…transferencia de archivos de limitación.

    En un servicio de transferencia de archivos nos quedamos un largo tiempo atrás, los archivos se sirve de 10 mbps uplink servidores. Para evitar que la red de empantanamiento, la descarga del script de seguimiento de cuántos usuarios se descarga a la vez y, a continuación, calcula cuántos bytes se podría enviar por segundo por cada usuario. Iba a enviar una parte de esta cantidad, entonces el sueño de un momento (1/4 de segundo, creo), a continuación, enviar más…etc.

    De esta manera, los servidores corriendo continuamente en aproximadamente el 9.5 Mbps, sin necesidad de enlace ascendente de la saturación de temas…y siempre ajustando dinámicamente las velocidades de las descargas.

    Yo no lo haría de esta manera, o en PHP, ahora…pero funcionó muy bien en el tiempo.

  11. 0

    Una de sus aplicaciones es, si estoy en el envío de mensajes de correo de una secuencia de comandos para más de 100 clientes, a continuación, esta operación puede tardar máximo de 1-2 segundos así, la mayoría de la página web, como hotmail y yahoo considerar como spam, por lo que para evitar esto tenemos que usar un poco de retraso en la ejecución después de cada correo.

  12. 0

    Entre otros: está probando una aplicación web que hace ayncronous solicitudes (las llamadas AJAX, perezoso de carga de imágenes,…)

    Está probando localmente de manera que las respuestas son inmediatas, ya que sólo hay un usuario (usted) y no la latencia de la red.

    Utilizando sleep te permite ver/probar cómo la aplicación web se comporta cuando la carga de la red y de causar retraso en las solicitudes.

  13. 0

    Una rápida pseudo código de ejemplo de hasta donde puede que no desee obtener millones de correos electrónicos de alerta para un solo evento, pero usted quiere que su script para seguir funcionando.

      if CheckSystemCPU() > 95  
            SendMeAnEmail()
            sleep(1800)
      fi

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea