set_time_limit în PHP

Stabilește câte secunde poate rula scriptul înainte să fie oprit.

Sintaxă
set_time_limit(int $seconds): bool

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_limit nu 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.