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

Fortgeschrittene können direkt in unsere PHP-Info-Seiten schauen:

Die PHP-Limits, nach denen am häufigsten gefragt wird, sind:

Limit Freespace Webhosting-Pakete
Script-Timeout 60 Sekunden 300 Sekunden
memory_limit 128M 256M
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
<?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, siehst du ebenfalls über die PHP-Info-Seiten oder eine eigene phpinfo()-Datei. Häufig angefragte Erweiterungen:

Erweiterung Freespace Webhosting-Pakete
ionCube Loader ja ja
ZIP nein ja
curl ja ja
XSL ja ja

Die ZIP-Erweiterung ist auf dem kostenlosen Webspace nicht installiert. In den Webhosting-Paketen steht sie zur Verfügung.

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:

Code
; 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.

Änderungen an der php.ini kannst du bei lima-city auf drei Arten vornehmen:

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
<?php
ini_set('output_buffering', 'On');

Diese Variante gilt nur für das aktuelle Skript und nur, wenn die jeweilige Direktive zur Laufzeit geändert werden darf.

.user.ini

Bei den Webhosting-Paketen wird PHP per 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:

INI
output_buffering = On
auto_prepend_file = /home/webpages/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

Einige ältere PHP-Skripte verlangen, dass always_populate_raw_post_data auf -1 gesetzt wird. Lege dafür im Hauptverzeichnis der Anwendung eine .user.ini an:

INI
always_populate_raw_post_data = -1

Die Datei muss in dem Verzeichnis liegen, aus dem die Anwendung ausgeführt wird. Wenn die Anwendung in einem Unterverzeichnis installiert ist, gehört die .user.ini in dieses Unterverzeichnis.

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
<?php

session_start();

$_SESSION['counter'] += 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:

Apache
Header always unset x-powered-by

WoltLab und Restricted OpCache API

Das WoltLab Community Framework und darauf aufbauende Burning-Board-Installationen können in Shared Hosting fälschlich davon ausgehen, dass die OpCache API nutzbar ist. In einer Shared-Hosting-Umgebung sollte diese API deaktiviert sein.

Wenn dadurch Probleme entstehen, setze in der WoltLab-Datei wcf/lib/system/WCF.php die Option:

PHP
protected static $zendOpcacheEnabled = false;

Bei WoltLab Core ab Version 5 liegt die Datei im Installationspfad unter lib/system/WCF.class.php.

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:

Apache
<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.

Frag die lima-city Hilfe Antworten basieren auf unseren Hilfeartikeln. Bitte sende keine Accountdaten oder Passwörter.