Start · Sprachen · PHP · Referenz · set_time_limit

set_time_limit

Funktion

Setzt das Zeitlimit für die maximale Ausführungszeit des aktuellen PHP-Skripts in Sekunden neu.

seit PHP 4.0.0 Kategorie: misc

Signatur

set_time_limit(int $seconds): bool

Beschreibung

set_time_limit() legt fest, wie viele Sekunden ein PHP-Skript maximal laufen darf. Wird das Limit überschritten, bricht PHP die Ausführung mit einem fatalen Fehler (Fatal error: Maximum execution time exceeded) ab. Der Timer wird bei jedem Aufruf der Funktion zurückgesetzt und beginnt neu zu zählen.

Der Standardwert für das Zeitlimit wird durch die PHP-INI-Direktive max_execution_time festgelegt (üblicherweise 30 Sekunden). Mit set_time_limit(0) lässt sich das Limit vollständig deaktivieren, sodass das Skript unbegrenzt laufen kann – sinnvoll etwa bei lang laufenden Batch-Jobs, Importen oder CLI-Skripten.

Typische Einsatzfälle sind Datei-Uploads, große Datenbankimporte, das Verarbeiten umfangreicher CSV-Dateien oder externe API-Aufrufe, bei denen die Standardzeit nicht ausreicht. Die Funktion gilt dabei nur für die verbleibende Ausführungszeit, nicht für bereits vergangene Zeit – jeder Aufruf startet den Timer von null.

Zu beachten ist, dass set_time_limit() unter dem Safe Mode (PHP < 5.4) keine Wirkung hat und ignoriert wird. Im CLI-Modus gilt standardmäßig kein Zeitlimit. Systemaufrufe, Datenbankabfragen oder externe Prozesse zählen unter Linux/Unix nicht zur PHP-Ausführungszeit, wohl aber unter Windows.

Parameter

Name Typ Default Beschreibung
$seconds Pflicht int Maximale Ausführungszeit in Sekunden. Der Wert 0 deaktiviert das Zeitlimit vollständig. Negative Werte sind nicht sinnvoll und sollten vermieden werden.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn das Zeitlimit erfolgreich gesetzt werden konnte, andernfalls false (z. B. wenn die Funktion durch die Konfiguration deaktiviert ist oder im Safe Mode läuft).

Beispiele

Zeitlimit für einen langen Datenbankimport erhöhen

<?php
// Zeitlimit auf 5 Minuten erhöhen für einen großen Import
set_time_limit(300);

$lines = file('grosser_import.csv');
foreach ($lines as $line) {
    // Simulierte Verarbeitung jeder Zeile
    // set_time_limit() hier erneut aufrufen verlängert das Limit bei jedem Schleifendurchlauf
    set_time_limit(30); // gibt dem Skript weitere 30 Sekunden pro Zeile
    process_line($line);
}

echo 'Import abgeschlossen.';
?>
Import abgeschlossen.

Zeitlimit deaktivieren für ein CLI-Batch-Skript

<?php
// Für lang laufende CLI-Skripte das Zeitlimit komplett deaktivieren
if (PHP_SAPI === 'cli') {
    set_time_limit(0);
}

$start = time();

// Simulierte lang laufende Aufgabe
for ($i = 1; $i <= 5; $i++) {
    sleep(1);
    echo "Schritt {$i} abgeschlossen." . PHP_EOL;
}

$elapsed = time() - $start;
echo "Gesamtdauer: {$elapsed} Sekunden" . PHP_EOL;
?>
Schritt 1 abgeschlossen. Schritt 2 abgeschlossen. Schritt 3 abgeschlossen. Schritt 4 abgeschlossen. Schritt 5 abgeschlossen. Gesamtdauer: 5 Sekunden

// Wichtig · Fallstricke

Sicherheitshinweis: Das unbegrenzte Deaktivieren des Zeitlimits (set_time_limit(0)) in Web-Skripten kann Server-Ressourcen erschöpfen und Denial-of-Service-Angriffe begünstigen. Verwende es ausschließlich in kontrollierten Umgebungen (z. B. CLI oder gesicherte Admin-Bereiche).

Plattformunterschiede: Unter Linux/Unix zählt die Zeit, die für sleep(), Systemaufrufe oder externe Prozesse aufgewendet wird, nicht zur PHP-Ausführungszeit. Unter Windows hingegen wird die Gesamtlaufzeit gemessen, was zu unerwartetem Abbruch führen kann.

Safe Mode (PHP < 5.4): Im Safe Mode hat set_time_limit() keinerlei Wirkung. Ab PHP 5.4 wurde der Safe Mode entfernt.

Alternative: Das Zeitlimit kann auch dauerhaft über die INI-Direktive max_execution_time in der php.ini oder per ini_set('max_execution_time', 300) gesetzt werden.