PHP Einstellungen lassen sich zur Laufzeit direkt in den PHP-Skripten verändern. Dazu nutzt man die Funktion ini_set(), um die vorgegebenen Einstellungen aus der php.ini zu überschreiben. Aber nicht alle PHP-Einstellungen lassen sich über diesen Weg überschreiben, so dass sich beispielsweise Besitzer einer Wordpress-Webseite wundern, warum upload_max_filesize nicht erhöht wird:
<?phpWarum lässt sich memory_limit ändern, upload_max_filesize wiederum nicht? Grundsätzlich arbeitet PHP mit vier Modi:
// Funktioniert
ini_set('memory_limit','100M');
echo ini_get('memory_limit');
// Funktioniert nicht
ini_set('upload_max_filesize', '100M');
echo ini_get('upload_max_filesize');
// Ausgabe
100M
2M
?>
Zusammengefasst bedeutet dies, dass der Anwender grundsätzlich alle Einstellungen überschreiben kann, sofern diese nicht als PHP_INI_SYSTEM deklariert sind. Siehe auch die offizielle PHP-Dokumentation Wo Konfigurationseinstellungen gesetzt werden können.
Jede PHP-Einstellung läuft unter einem der genannten Modi. Hier ein Auszug aus dieser vollständigen Liste:
PHP-Einstellung | PHP-Modus | Überschreibbar |
allow_url_fopen | PHP_INI_SYSTEM | Nein |
memory_limit | PHP_INI_ALL | Ja |
post_max_size | PHP_INI_PERDIR | Ja |
upload_max_filesize | PHP_INI_PERDIR | Ja |
max_execution_time | PHP_INI_ALL | Ja |
max_file_uploads | PHP_INI_SYSTEM | Nein |
Hierbei sieht man sehr schnell, dass PHP die Einstellungen unterschiedlich "behandelt". Wer memory_limit oder max_execution_time überschreiben muss, tut dies einfach via ini_set() im Skript. Dagegen müssen post_max_size und upload_max_filesize über die .htaccess bzw. .user.ini überschrieben werden. ini_set() funktioniert leider nicht.
// Auszug .htaccess bzw. .user.iniSchlechte Karten hat der Webseiten-Besitzer bei max_file_uploads und allow_url_fopen. Diese kritischen Einstellungen darf nur der Administrator in der php.ini festlegen.
upload_max_filesize = 100M
post_max_filesize = 100M