sleep / usleep în PHP

Oprește scriptul pentru un număr de secunde (sleep) sau de microsecunde (usleep).

Sintaxă
sleep(int $seconds): int

Ce face sleep / usleep

sleep pune scriptul în așteptare pentru numărul de secunde dat, apoi codul continuă. usleep face același lucru în microsecunde: usleep(500000) înseamnă o jumătate de secundă.

Se folosește pentru a reîncerca o operație după o pauză, pentru a nu trimite prea multe cereri pe secundă către un API sau în scripturi rulate din linia de comandă. Pe o pagină web, fiecare secundă de așteptare este o secundă în plus pentru vizitator.

Parametri

Parametru Descriere
$seconds Numărul de secunde de așteptare. Pentru usleep: microsecunde (1 secundă = 1.000.000).

Ce returnează

sleep: 0 la succes. usleep: nimic.

Exemple

Exemplul 1: O pauză de o secundă

<?php
$start = microtime(true);
sleep(1);
$durata = microtime(true) - $start;

echo "Am așteptat " . round($durata) . " secundă";

Rezultat

Am așteptat 1 secundă

Exemplul 2: Reîncercare cu pauză

Simulăm un serviciu care răspunde abia la a treia încercare. Între încercări așteptăm 0,2 secunde cu usleep.

<?php
function trimite(int $incercare): bool
{
    return $incercare >= 3;
}

for ($i = 1; $i <= 5; $i++) {
    if (trimite($i)) {
        echo "Trimis la încercarea $i\n";
        break;
    }
    echo "Încercarea $i a eșuat, aștept...\n";
    usleep(200000);
}

Rezultat

Încercarea 1 a eșuat, aștept...
Încercarea 2 a eșuat, aștept...
Trimis la încercarea 3

Greșeli frecvente

  • Dai lui sleep o valoare cu zecimale, de exemplu sleep(0.5). Parametrul este întreg și primești Deprecated, iar pauza este 0. Pentru fracțiuni de secundă folosește usleep.
  • Folosești sleep pe o pagină ca să „încetinești” atacurile. Fiecare cerere ține ocupat un proces al serverului. Limitează cererile la nivel de server.

Comenzi înrudite

  • set_time_limit: Stabilește câte secunde poate rula scriptul înainte să fie oprit.
  • time: Returnează momentul curent ca număr de secunde de la 1 ianuarie 1970 (timestamp Unix).