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
sleepo valoare cu zecimale, de exemplusleep(0.5). Parametrul este întreg și primeștiDeprecated, iar pauza este 0. Pentru fracțiuni de secundă foloseșteusleep. - Folosești
sleeppe 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).