Signatur
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
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.';
?>
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;
?>
// 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.