Ce face set_time_limit
PHP oprește scripturile care rulează prea mult, după numărul de secunde din setarea max_execution_time (pe servere, de obicei 30). set_time_limit schimbă această limită și repornește numărătoarea de la zero. Cu 0, scriptul nu mai are limită.
Pe Linux se numără doar timpul în care rulează chiar codul PHP. Așteptarea după baza de date, după o cerere HTTP sau după sleep nu intră în calcul. În linia de comandă limita implicită este deja 0.
Parametri
| Parametru | Descriere |
|---|---|
$seconds |
Numărul de secunde permis de acum înainte. 0 înseamnă fără limită. |
Ce returnează
true la succes, false dacă limita nu poate fi schimbată (de exemplu este dezactivată de găzduire).
Exemple
Exemplul 1: O limită nouă pentru un import
<?php
set_time_limit(300);
echo "Limita este acum " . ini_get("max_execution_time") . " secunde";
Rezultat
Limita este acum 300 secunde
Exemplul 2: Limita repornită la fiecare lot
Fiecare lot primește din nou 30 de secunde, dar un lot blocat tot va fi oprit.
<?php
$loturi = [["Ana", "Ion"], ["Maria"], ["Dan", "Elena"]];
foreach ($loturi as $i => $lot) {
set_time_limit(30);
echo "Lotul " . ($i + 1) . " importat: " . implode(", ", $lot) . "\n";
}
Rezultat
Lotul 1 importat: Ana, Ion
Lotul 2 importat: Maria
Lotul 3 importat: Dan, Elena
Greșeli frecvente
- Pui
set_time_limit(0)pe orice pagină. Un script blocat va ocupa serverul la nesfârșit. Folosește o limită mare, dar finită, și doar unde e nevoie. - Scriptul tot se oprește după 60 de secunde. Limita poate veni și de la serverul web (Nginx, Apache) sau de la PHP-FPM, pe care
set_time_limitnu le poate schimba.
Comenzi înrudite
ini_set / ini_get: Schimbă o setare din php.ini doar pentru scriptul curent (ini_set) sau îi citește valoarea (ini_get).sleep / usleep: Oprește scriptul pentru un număr de secunde (sleep) sau de microsecunde (usleep).ignore_user_abort: Stabilește dacă scriptul continuă să ruleze după ce vizitatorul închide pagina.