PHP-Einstellungen ändern (php.ini)
Die php.ini ist die zentrale Konfigurationsdatei für PHP. In ihr werden PHP-Limits, einzelne PHP-Optionen und einige Verhaltensweisen von PHP festgelegt. Dieser Artikel fasst zusammen, welche Werte bei lima-city gelten, wie Du eigene Einstellungen setzt und welche Grenzen in einer Shared-Hosting-Umgebung nicht pro Account geändert werden können.
PHP-Limits prüfen
Prüfe die wirksamen Werte direkt im Verzeichnis Deiner Anwendung mit einer vorübergehenden phpinfo()-Datei, wie unten beschrieben. Eine zentrale Informationsseite muss nicht Deine PHP-Version und Tarifkonfiguration abbilden.
Die PHP-Limits, nach denen am häufigsten gefragt wird, sind:
| Limit | Freespace | Webhosting-Pakete |
|---|---|---|
| Script-Timeout | 60 Sekunden | 300 Sekunden |
memory_limit |
regulär 256M | paketabhängig; wirksamen Wert prüfen |
post_max_size |
10M | 500M |
upload_max_filesize |
4M | 500M |
Wenn Du die Werte für ein bestimmtes Verzeichnis prüfen möchtest, lege dort eine Datei info.php mit folgendem Inhalt ab:
<?php phpinfo(); ?>
Rufe diese Datei anschließend im Browser auf. Die angezeigte PHP-Version und die Werte hängen davon ab, welche PHP-Version und welche .user.ini für genau dieses Verzeichnis aktiv sind. Lösche die Datei nach der Prüfung wieder, damit keine unnötigen Systemdetails öffentlich erreichbar bleiben.
Installierte PHP-Erweiterungen
Welche PHP-Erweiterungen aktiv sind, prüfst Du mit phpinfo() in der jeweiligen Website. Verfügbarkeit und Kompatibilität hängen auch von der ausgewählten PHP-Version ab.
Häufig benötigte Erweiterungen sind curl, XSL, ZIP und der ionCube Loader. Prüfe insbesondere ZIP für Deine konkrete Umgebung, bevor Du eine Anwendung installierst; verwende dafür die Anzeige der konkreten Installation. Der ionCube Loader ist nicht für jede PHP-Version verfügbar, insbesondere ist er in unserer PHP-8.0-Konfiguration nicht aktiviert. Verwende für verschlüsselte Anwendungen eine vom Hersteller unterstützte PHP-/Loader-Kombination.
OPcache kann aktiv sein, ohne als nachzuladende Erweiterung in der Konfiguration aufzutauchen: Ab PHP 8.5 ist es fest in PHP eingebaut. Ob es für den jeweiligen Ausführungsmodus aktiviert ist und welche Limits gelten, zeigt die konkrete PHP-Konfiguration.
Weitere PHP-Erweiterungen anfragen
Wenn eine PHP-Erweiterung fehlt, prüfe zuerst im Forum, ob sie bereits angefragt wurde. Falls nicht, erstelle ein Thema im Forum Wünsche und Vorschläge und beachte dort die Regeln für Wünsche und Vorschläge.
Nicht jede Erweiterung kann in einer Shared-Hosting-Umgebung installiert werden. Erweiterungen müssen stabil, wartbar und sicher für alle Nutzer des Servers sein.
PHP-Einstellungen ändern
PHP-Konfigurationsdirektiven werden zeilenweise nach folgendem Schema eingetragen:
; Zeilen mit einem Semikolon am Anfang sind Kommentare
; Name der Direktive = zugewiesener Wert
; Beispiel:
output_buffering = On
Eine Liste aller Konfigurationsdirektiven, die PHP unterstützt, findest Du in der PHP-Dokumentation "Liste der php.ini-Direktiven". Nicht alle Einstellungen lassen sich pro Account ändern. Direktiven mit PHP_INI_SYSTEM sind global und können nicht per .user.ini oder ini_set() überschrieben werden.
Eigene Einstellungen setzt Du mit den folgenden Methoden; eine eigene php.ini ersetzt nicht die Serverkonfiguration:
ini_set() im PHP-Skript
Einige Einstellungen können in einem PHP-Skript mittels ini_set() verändert werden. Dafür fügst Du die Anweisung direkt in das PHP-Skript ein:
<?php
ini_set('display_errors', '0');
Diese Variante gilt nur für das aktuelle Skript und nur bei zur Laufzeit änderbaren Direktiven (INI_ALL). output_buffering ist dagegen INI_PERDIR und gehört in die .user.ini. Zusätzlich können serverseitige PHP-Admin-Limits Änderungen verhindern: Insbesondere lässt sich die für Deinen Tarif gesetzte Memory-Obergrenze nicht mit ini_set() oder .user.ini erhöhen.
.user.ini
PHP wird über PHP-FPM ausgeführt. PHP-FPM benutzt eine .user.ini, um die Konfiguration pro Verzeichnis einzustellen. Ja, der Dateiname lautet wirklich "Punkt user Punkt ini".
Die Änderungen gelten für den Ordner, in dem die .user.ini liegt, und für alle Unterverzeichnisse. Der Inhalt kann zum Beispiel so aussehen:
output_buffering = On
auto_prepend_file = /home/webpages/lima-city/username/html/prepend.php
user_ini.cache_ttl steuert, wie oft Benutzer-INI-Dateien neu eingelesen werden. Der Standardwert bei lima-city beträgt 30 Sekunden. Warte nach Änderungen deshalb kurz und lade die Seite anschließend neu.
always_populate_raw_post_data setzen
Diese Direktive betrifft historische PHP-Versionen. Seit PHP 7 ist always_populate_raw_post_data entfernt; ein Eintrag in .user.ini ist dort keine Lösung. Aktualisiere die betroffene Anwendung auf eine unterstützte Version. Eigene Skripte lesen den unverarbeiteten Request-Body bei Bedarf über php://input.
Sessions funktionieren nicht
PHP-Sessions funktionieren auf dem Webspace grundsätzlich. Wenn Sessions nicht korrekt arbeiten, liegt die Ursache meistens im Skript selbst. Ein minimaler Test sieht so aus:
<?php
session_start();
$_SESSION['counter'] = ($_SESSION['counter'] ?? 0) + 1;
var_dump($_SESSION);
Bei jedem Aufruf wird der Zähler erhöht. Wenn dieser Test funktioniert, aber Deine Anwendung nicht, prüfe vor allem diese Punkte:
- Vor
session_start()darf keine Ausgabe erfolgen, auch keine Leerzeile vor<?php. - Ein unsichtbares UTF-8 Byte Order Mark am Dateianfang kann bereits als Ausgabe zählen.
- Fehlerhafte Weiterleitungen oder mehrere Domains für dieselbe Anwendung können Session-Cookies durcheinanderbringen.
Wenn die Fehlermeldung Cannot modify header information - headers already sent erscheint, prüfe zusätzlich den Abschnitt zum UTF-8 Byte Order Mark.
X-Powered-By-Header entfernen
Der X-Powered-By-Header kann die PHP-Version enthalten. Er wird durch die PHP-Direktive expose_php gesteuert. Diese Direktive lässt sich nicht per .user.ini ändern, weil sie global gesetzt ist.
Du kannst den Header aber per Apache-Header-Regel entfernen. Lege dazu im Verzeichnis der Webseite oder im Stammverzeichnis eine .htaccess-Datei mit folgendem Inhalt an:
Header always unset x-powered-by
WoltLab und Restricted OpCache API
Die OPcache-Verwaltungs-API kann im Shared Hosting eingeschränkt sein, auch wenn OPcache selbst aktiv ist. Prüfe bei einer entsprechenden WoltLab-Meldung zuerst, ob Deine WoltLab-Version aktuell ist und welche Anpassung der Hersteller für diese Version vorsieht. Ändere keine WoltLab-Core-Dateien nach einer Anleitung für eine andere Version; solche Änderungen können Updates überschreiben oder die Installation beschädigen.
Mehrere PHP-Versionen nutzen
In Webhosting-Paketen kannst Du für verschiedene Webseiten oder Verzeichnisse unterschiedliche PHP-Versionen verwenden. Das gilt nicht für den Freespace.
Um die PHP-Version eines Ordners festzulegen, erstelle dort eine .htaccess-Datei und setze den passenden Handler:
<Files ~ (\.php$)>
<If "-f %{REQUEST_FILENAME}">
SetHandler proxy:unix:/usr/share/lima/php-[benutzername]/php-fpm-82|fcgi://localhost-[benutzername]-php82
</If>
</Files>
Ersetze [benutzername] durch Deinen lima-city-Benutzernamen und 82 durch die gewünschte PHP-Version ohne Punkt. Welche Versionen aktuell verfügbar sind, prüfst Du am zuverlässigsten über die Verwaltung oder über phpinfo() im jeweiligen Verzeichnis.
Wenn Du PHP per SSH nutzt, betrifft das nicht automatisch die Webserver-Version. Für PHP auf der Kommandozeile gibt es den separaten Artikel PHP-Versionen und SSH.