In PHP lassen sich viele Konfigurationseinstellungen nicht nur über die php.ini festlegen, sondern auch direkt im laufenden Script ändern. Die Funktion ini_set() macht genau das möglich. Das ist besonders praktisch auf Shared-Hosting-Servern, wo man keinen Zugriff auf die globale Konfigurationsdatei hat, oder wenn ein einzelnes Script abweichende Einstellungen benötigt.
So funktioniert ini_set()
Die Funktion erwartet zwei Parameter: den Namen der PHP-Einstellung und den gewünschten neuen Wert. Die Änderung gilt ausschließlich für den aktuellen Script-Durchlauf. Sobald das Script beendet ist, stellt PHP automatisch den ursprünglichen Wert wieder her.
<?php
ini_set('einstellung_name', 'neuer_wert');
?>
Der Rückgabewert ist der alte Wert der Einstellung vor der Änderung. Falls die Änderung fehlschlägt, gibt die Funktion false zurück. Beim Prüfen des Rückgabewerts sollte immer der strikte Vergleichsoperator !== false verwendet werden, da der alte Wert auch ein leerer String oder "0" sein kann.
Aktuellen Wert auslesen mit ini_get()
Mit der Funktion ini_get() lässt sich der aktuelle Wert einer beliebigen PHP-Einstellung abfragen. Das eignet sich gut, um vor einer Änderung den Ausgangswert zu prüfen oder nach dem Aufruf von ini_set() sicherzustellen, dass die Änderung übernommen wurde.
<?php
echo ini_get('memory_limit');
/* Ausgabe z.B.: 128M */
?>
Beispiel: Speicherlimit erhöhen
Bei der Verarbeitung großer Dateien oder umfangreicher Datenbank-Ergebnisse kann es vorkommen, dass der standardmäßig zugewiesene Arbeitsspeicher nicht ausreicht. Mit ini_set() lässt sich das memory_limit zur Laufzeit erhöhen.
<?php
echo 'Vorher: ' . ini_get('memory_limit');
/* Ausgabe: Vorher: 128M */
$alter_wert = ini_set('memory_limit', '256M');
if ($alter_wert !== false) {
echo 'Nachher: ' . ini_get('memory_limit');
/* Ausgabe: Nachher: 256M */
} else {
echo 'Einstellung konnte nicht geändert werden.';
}
?>
Beispiel: Fehleranzeige steuern
Während der Entwicklung ist es hilfreich, alle PHP-Fehler und Warnungen direkt im Browser anzuzeigen. Im Produktivbetrieb sollte die Fehlerausgabe dagegen abgeschaltet und stattdessen in eine Logdatei umgeleitet werden.
<?php
/* Entwicklung: Fehler anzeigen */
ini_set('display_errors', '1');
error_reporting(E_ALL);
/* Produktion: Fehler nur loggen */
ini_set('display_errors', '0');
ini_set('log_errors', '1');
?>
Welche Einstellungen lassen sich ändern?
Nicht jede PHP-Einstellung lässt sich per ini_set() ändern. PHP teilt die Einstellungen in verschiedene Stufen ein:
PHP_INI_ALL kann jederzeit geändert werden, auch per ini_set() im Script. Dazu gehören zum Beispiel display_errors, error_reporting und memory_limit.
PHP_INI_PERDIR lässt sich nur in der php.ini, per .htaccess oder in der Webserver-Konfiguration setzen. Ein Beispiel dafür ist upload_max_filesize.
PHP_INI_SYSTEM kann ausschließlich in der php.ini oder direkt in der Webserver-Konfiguration geändert werden. Ein Versuch mit ini_set() bleibt hier wirkungslos.
Versucht man eine Einstellung zu ändern, die per Script nicht änderbar ist, gibt ini_set() den Wert false zurück.
Änderung zurücksetzen mit ini_restore()
Wenn eine geänderte Einstellung vor Ende des Scripts wieder auf ihren Originalwert zurückgesetzt werden soll, steht dafür die Funktion ini_restore() bereit.
<?php
ini_set('display_errors', '1');
echo ini_get('display_errors');
/* Ausgabe: 1 */
ini_restore('display_errors');
echo ini_get('display_errors');
/* Ausgabe: 0 (Originalwert) */
?>
Häufig verwendete Einstellungen
Folgende Einstellungen werden in der Praxis besonders oft per ini_set() angepasst:
memory_limit bestimmt den maximalen Arbeitsspeicher pro Script. Typische Werte sind '128M' oder '256M'.
max_execution_time legt die maximale Laufzeit in Sekunden fest. Der Wert '0' bedeutet keine Begrenzung.
display_errors steuert, ob Fehlermeldungen im Browser erscheinen. In der Entwicklung auf '1' setzen, im Produktivbetrieb auf '0'.
date.timezone setzt die Standardzeitzone für alle Datumsfunktionen, zum Beispiel 'Europe/Berlin'.
Eine vollständige Übersicht aller Einstellungen und ihrer Änderungsstufen findet sich in der offiziellen PHP-Dokumentation unter php.net/manual/de/ini.list.php.