Start · Sprachen · PHP · Referenz · ini_set

ini_set

Funktion

Setzt den Wert einer PHP-Konfigurationsoption zur Laufzeit und gibt den vorherigen Wert zurück.

seit PHP 4.0.0 Kategorie: misc

Signatur

ini_set(string $option, string|int|float|bool|null $value): string|false

Beschreibung

ini_set() ermöglicht es, PHP-Konfigurationsoptionen direkt im Skript zur Laufzeit zu verändern, ohne die php.ini-Datei bearbeiten zu müssen. Die Änderung gilt ausschließlich für die Dauer der aktuellen Anfrage und wird nach dem Skriptende automatisch zurückgesetzt.

Typische Anwendungsfälle sind das temporäre Erhöhen des Speicherlimits (memory_limit), das Setzen der Standardzeitzone (date.timezone), das Anpassen des Fehler-Reportings (error_reporting) oder das Konfigurieren von Session-Parametern. Viele Einstellungen, die in der php.ini oder per .htaccess gesetzt werden können, lassen sich auch über ini_set() steuern.

Nicht alle Optionen können zur Laufzeit geändert werden – ob eine Option änderbar ist, hängt von ihrem PHP_INI_*-Modus ab. Nur Optionen mit dem Modus PHP_INI_USER oder PHP_INI_ALL sind per ini_set() setzbar. Optionen mit Modus PHP_INI_SYSTEM oder PHP_INI_PERDIR können nicht zur Laufzeit geändert werden und führen zu einem Rückgabewert false.

Um eine Option auf ihren ursprünglichen Wert zurückzusetzen, kann die Funktion ini_restore() verwendet werden. Den aktuellen Wert einer Option liest man mit ini_get() aus.

Parameter

Name Typ Default Beschreibung
$option Pflicht string Der Name der zu setzenden Konfigurationsoption, z. B. 'memory_limit', 'display_errors' oder 'date.timezone'.
$value Pflicht string|int|float|bool|null Der neue Wert der Option. null setzt die Option auf einen leeren Wert. Boolesche Werte sollten als '1' (an) bzw. '0' oder '' (aus) übergeben werden, um konsistentes Verhalten sicherzustellen.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den vorherigen Wert der Option als string zurück, falls die Option erfolgreich gesetzt werden konnte. Bei Misserfolg – etwa wenn die Option nicht zur Laufzeit änderbar ist oder nicht existiert – wird false zurückgegeben.

Beispiele

Speicherlimit für einen speicherintensiven Import erhöhen

<?php
// Vorherigen Wert sichern
$previousLimit = ini_set('memory_limit', '512M');

if ($previousLimit === false) {
    echo "Konnte memory_limit nicht ändern.\n";
} else {
    echo "Vorheriges Limit: " . $previousLimit . "\n";
    echo "Neues Limit: " . ini_get('memory_limit') . "\n";

    // Speicherintensive Operation ...
    $data = file_get_contents('/var/data/grosser_import.csv');

    // Limit wieder zurücksetzen
    ini_restore('memory_limit');
    echo "Limit nach Wiederherstellung: " . ini_get('memory_limit') . "\n";
}
Vorheriges Limit: 128M Neues Limit: 512M Limit nach Wiederherstellung: 128M

Fehlerausgabe und Zeitzone konfigurieren

<?php
// Fehler im Entwicklungsmodus anzeigen
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

// Zeitzone für das Skript setzen
ini_set('date.timezone', 'Europe/Berlin');

echo date('Y-m-d H:i:s') . "\n";

// Session-Cookie auf HttpOnly und Secure setzen
ini_set('session.cookie_httponly', '1');
ini_set('session.cookie_secure', '1');
ini_set('session.use_strict_mode', '1');
session_start();

echo "Session gestartet mit sicheren Cookie-Einstellungen.\n";
2024-03-15 14:32:07 Session gestartet mit sicheren Cookie-Einstellungen.

// Wichtig · Fallstricke

Sicherheitshinweis: Einige Optionen haben direkte Sicherheitsauswirkungen. Zum Beispiel sollten session.cookie_httponly, session.cookie_secure und session.use_strict_mode stets aktiviert sein, um Session-Hijacking zu erschweren. Das versehentliche Aktivieren von display_errors in einer Produktionsumgebung kann interne Systeminformationen preisgeben.

Nicht alle Optionen sind änderbar: Optionen wie disable_functions, open_basedir oder safe_mode können nicht per ini_set() gesetzt werden (Modus PHP_INI_SYSTEM). Ein Rückgabewert von false sollte daher immer geprüft werden.

Typen und Werte: Ab PHP 8.0 akzeptiert ini_set() neben Strings auch int, float, bool und null als Wert. In älteren Versionen sollte der Wert stets als String übergeben werden. Boolesche Optionen sind zuverlässiger als '1' und '0' zu setzen.

Kein dauerhafter Effekt: Änderungen durch ini_set() gelten nur für den aktuellen Request. Für dauerhafte Änderungen muss die php.ini, eine .htaccess-Datei oder eine php.ini-Direktive im Webserver genutzt werden.