Signatur
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
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";
}
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";
// 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.