PHP 5.5 End of Life

Mit der gestern (21.07.) veröffentlichten PHP-Version 5.5.38 wird die Unterstützung des Versionszweiges 5.5 von den PHP-Entwicklern eingestellt, es wird keine weiteren Updates (z.B. wegen Sicherheitslücken) für diese PHP-Version mehr geben. Wir empfehlen daher allen Kunden, die gegenwärtig noch PHP 5.5 nutzen, auf die neueren PHP-Versionen 5.6 oder 7.0 zu wechseln. Beim Wechsel von PHP 5.5 auf 5.6 treten nur in sehr selten Fällen Kompatibiltätsprobleme auf, da es keine großen Unterschiede zwischen beiden Versionen gibt. Bei PHP 7.0 wurden viele veraltete Bibliotheken und Funktionen entfernt, so dass hier häufiger Kompatibilitätsprobleme auftreten. Die PHP-Versionen 5.6 und 7.0 werden noch bis Ende 2018 mit regelmäßigen Sicherheitsupdates versorgt.

Sie können die auf Ihrem Webserver standardmäßig genutzte PHP-Version mittels SSH über den Shell-Befehl php -v oder der PHP-Funktion phpinfo() ermitteln. Mittels dieser Funktion können Sie auch prüfen, ob die Umstellung Ihrer Webseite auf eine andere PHP-Version erfolgreich war. Erstellen Sie dazu im gewünschen Webspace-Verzeichnis eine Textdatei mit der Endung .php (z.B. info.php) und dem Inhalt <?php phpinfo(); ?> und rufen diese Datei dann über Ihren Web-Browser auf (z.B. www.domain.de/info.php).

Eine Anleitung zum Wechsel der PHP-Version finden Sie hier. Falls Sie PHP-FPM nutzen, können Sie diese PHP-Version nicht selbst ändern, wenden Sie sich in diesem Fall bitte an unsere Kundenbetreuung.

Aufgrund möglicher Kompatibilitätsprobleme können wir die standardmäßig genutzte PHP-Version auf dem Webservern nicht einfach auf 5.6 oder 7.0 umstellen, da in diesem Fall bestehende Webseiten unter Umständen nicht mehr funktionieren.

Probleme mit ownCloud und PHP 7

Gegenwärtig gibt es ein Problem mit ownCloud und der aktuellen PHP-Version 7.0.6, die wir am 29.04. auf allen Webservern installiert haben. Betroffen sind ausschließlich Kunden, die PHP 7 manuell über eine .htaccess-Konfigurationsdatei aktiviert haben. Unter PHP 7 wird beim Aufruf der ownCloud-Seite die Fehlermeldung “Interner Serverfehler” angezeigt. Die Ursache ist ein Programmierfehler in ownCloud, der bei den vorigen PHP-Versionen noch keine Auswirkungen hatte.

Die einfachste Lösung für dieses Problem ist die ältere PHP-Version 5.6 zu nutzen, bis der Fehler durch ein ownCloud-Update behoben wird. Eine Anleitung zur Auswahl der PHP-Version finden Sie hier.

Falls Sie weiterhin PHP 7 nutzen möchten, muss die PHP-Datei “request.php” im ownCloud-Unterverzeichnis “lib/private/appframework/http” angepasst werden. Sie können diese Datei per (S)FTP herunterladen oder direkt auf dem Webserver mit einem Texteditor bearbeiten. Suchen Sie nach der Zeile “public function __isset($name) {” und fügen dort die folgenden 3 grün markieren Zeilen hinzu:

    public function __isset($name) {
        if (in_array($name, $this->allowedKeys, true)) {
            return true;
        }
        return isset($this->items['parameters'][$name])
    }

Update vom 02.05.2016: Wir haben bei allen von uns für Kunden installierten Owncloud-Instanzen die entsprechenden Änderungen vorgenommen.

Mögliche Probleme mit Apache 2.4.17 und mod_rewrite

Wir haben am 15.10. ein Update der Webserver-Software Apache von Version 2.4.16 auf 2.4.17 vorgenommen, dabei hat sich eine unerwartete Änderung im Modul mod_rewrite ergeben, die zu Problemen mit einigen PHP-Anwendungen (z.B. Concrete5) führen kann: Die Server-Variable “REDIRECT_URL” wurde von einer relativen URL (z.B. “/kapitel/2/”) auf eine vollständige URL (z.B. “http://www.domain.de/kapitel/2/”) umgestellt, daher könnten PHP-Scripte, die auf diese Variable zurückgreifen, unter Umständen nicht mehr korrekt funktionieren.

Falls Sie seit dem 15.10. Probleme mit Ihrer Webseite festgestellt haben, die zuvor nicht aufgetreten sind, wenden Sie sich bitte an unsere Kundenbetreuung.

PHP 7 RC 3 verfügbar

Ab sofort steht auf unseren Webservern der aktuelle Release Candidate 3 von PHP 7 zu Testzwecken zur Verfügung.

Wir haben dabei eine für viele Kunden interessante Neuerung hinzugefügt, und zwar einen Datei-basierten PHP-Beschleuniger.

Hintergründe zu PHP-Beschleunigern

PHP ist eine Script-Sprache, die vor der Ausführung auf unseren Webservern in für Computer verständlichen Mikroprozessor-Code übersetzt werden muss. PHP nutzt dabei (ähnlich wie Java) eine sogenannte Virtuelle Maschine, es wird also nicht direkt Mikroprozessor-Code erzeugt, sondern zunächst sogenannter Bytecode für eine Virtuelle Maschine (Zend Engine), die daraus dann im nächsten Schritt Mikroprozessor-Code erzeugt und diesen ausführt.
Dieser Bytecode wird jedoch nach der Ausführung eines PHP-Scripts verworfen, und muss jedes Mal zeitaufwändig neu generiert werden. Um dies zu vermeiden gibt es diverse PHP-Beschleuniger wie den PHP-eigenen OpCache, die den Bytecode für spätere Script-Aufrufe optimieren und zwischenspeichern. Allerdings wurde dieser Bytecode bisher immer im Arbeitsspeicher abgelegt, was auf unseren Shared-Hosting-Servern aus technischen Gründen nicht funktioniert, und nur in den Pro-Paketen (bzw. auf Dedicated-Servern) mit PHP-FPM möglich ist.

Seit PHP 7 kann der PHP OpCache den Bytecode optional auch in Dateien speichern, damit lässt er sich auf allen Shared-Hosting-Servern nutzen.

Wir haben anhand einer aktuellen WordPress-Installation die möglichen Performance-Verbesserungen durch OpCache getestet (Mittelwert über 100 Aufrufe):

opcache-file-small

Im Vergleich zu PHP 5.6 ohne OpCache verkürzt sich die PHP-Ausführungszeit für die WordPress-Startseite um Faktor 2, der Datei-OpCache lohnt sich also wirklich.

PHP 7 und OpCache aktivieren

Um PHP 7 mit OpCache zu nutzen, erstellen Sie zunächst ein Verzeichnis für die Bytecode-Dateien auf Ihrem Webserver. Dieses Verzeichnis können Sie beliebig benennen (z.B. “opcache”), und an beliebiger Stelle in Ihrem Benutzerverzeichnis anlegen, die Zugriffsrechte sollten jedoch aus Sicherheitsgründen auf Ihren Benutzeraccount beschränkt werden (chmod 700).

Legen Sie dann im gewünschten Webserver-Verzeichnis eine .htaccess-Datei mit folgendem Inhalt an (bzw. fügen Sie folgende Zeile zu einer bestehenden .htaccess-Datei hinzu):

AddHandler application/x-httpd-php70 .php

Anschließend legen Sie in diesem Verzeichnis eine php.ini-Datei mit folgendem Inhalt an (bzw. fügen die folgenden Zeilen zu einer bestehenden php.ini-Datei hinzu):

zend_extension=/vrmd/webserver/php70/lib/opcache.so
opcache.file_cache=/homepages/u12345/opcache
opcache.file_cache_only=1

Ersetzen Sie dabei “/homepages/u12345/opcache” durch den vollständigen Pfad zu Ihrem Bytecode-Verzeichnis. Beachten Sie bitte, dass php.ini-Dateien nur in dem Verzeichnis gelten, wo auch das aufgerufene PHP-Script liegt, eventuell müssen Sie diese Datei daher noch in weitere Unterverzeichnisse kopieren.

Hinweis

Bitte beachten Sie, dass sich PHP 7 noch in der Entwicklungsphase befindet, es können noch diverse kleinere Fehler und Probleme auftreten. Sie sollten PHP 7 daher besser noch nicht für kritische Webseiten einsetzen.

PHP-FPM für Pro-Pakete und Reseller mit Dedicated Servern

Seit einigen Monaten bieten wir für Endkunden mit Pro-Paketen und Reseller mit eigenem Dedicated Server PHP-FPM als zusätzlichen PHP-Handler an.

PHP-FPM ist sogenannter FastCGI-Prozessmanager, der direkt in PHP integriert ist. Mittels PHP-FPM wird für einen Webserver-Benutzer ein Vorrat an stetig laufenden PHP-Prozessen vorgehalten, so dass PHP-Scripte schneller gestartet werden können. Der größte Vorteil von PHP-FPM ist jedoch die mögliche Nutzung eines sogenannten Opcode-Caches: PHP-Scripte liegen immer im Quelltext vor, und müssen daher vor der Ausführung in Maschinencode (Opcode) übersetzt werden. Dieser Vorgang wird beim Aufruf von PHP-Scripten über unsere Webserver automatisch ausgeführt. Der Opcode wird dabei jedoch nach der Ausführung eines Scripts sofort wieder verworfen, so dass es beim nächsten Aufruf erneut in Maschinencode übersetzt werden muss. Der Opcode kann jedoch auch in einem Cache zwischengespeichert (und optimiert) werden, so dass der zeitaufwändige Übersetzungsvorgang bei späteren Script-Aufrufen wegfällt.

Seit PHP 5.5 ist hierzu OPcache fester Bestandteil von PHP geworden. Grundsätzlich lässt sich OPCache mit allen FastCGI-Prozessmanagern nutzen, PHP-FPM bietet jedoch einige Vorteile zu anderen Prozessmanagern wie dem bei vielen Webhostern eingesetzten Apache FCGID: Normalerweise wird der Arbeitsspeicher für den Opcode-Cache vom PHP-Speicherlimit abgezogen, und der Cache wird nicht zwischen unterschiedlichen PHP-Prozessen geteilt. So kann es vorkommen, dass ein PHP-Script von einem Prozess ausgeführt wird, der dieses Script noch nicht im Cache hält, während das gleiche Script bei einem anderen Prozess schon im Cache ist und somit viel schneller ausgeführt werden kann. Bei PHP-FPM wird ein zwischen allen PHP-Prozessen geteilter Opcode-Cache genutzt, und der hierfür benötigte Arbeitsspeicher wird nicht vom PHP-Speicherlimit abgezogen.

In der Praxis lassen sich durch OPcache drastische Performance-Gewinne von 100% und mehr verzeichnen, insbesondere bei komplexeren Webshops oder Content-Management-Systemen. Falls Sie bereits bereits ein Pro-Paket oder einen Dedicated-Server haben und PHP-FPM nutzen möchten wenden Sie sich bitte an unsere Kundenbetreuung. Wir können ebenso zu Testzwecken PHP-FPM für Benutzer auf Shared-Hosting-Servern aktivieren, so dass Sie vor einem Tarif-Upgrade prüfen können, ob es sich für Sie lohnt.

Da bei PHP-FPM ständig laufende PHP-Prozesse vorgehalten werden, die alle Arbeitsspeicher verbrauchen, kann es auf unseren Shared-Hosting-Servern leider nicht für alle Benutzer aktiviert werden. Ebenso lässt sich OPcache dort nicht sinnvoll nutzen, da es ohne FastCGI-Prozessmanager keine Leistungssteigerung bringt.

Default-PHP-Version im Systempfad

Auf unseren Webservern war PHP bisher nicht im Systempfad eingerichtet, da wir auf den Servern verschiedene PHP-Version installiert haben, und nicht klar ist, welche Version genau aufgerufen werden soll. Viele Webshops oder Content-Management-Systeme bringen mittlerweile jedoch vorgefertigte Cron-Scripte mit, die bisher auf unseren Servern nur mit kleinen Anpassungen liefen, da sie PHP im Systempfad erwarten. Wir haben uns daher entschlossen, die jeweilige Default-PHP-Version des Webservers in den Systempfad aufzunehmen, so dass Sie bei Shell-Scripten und Cronjobs nicht mehr den vollen Pfad zur gewünschten PHP-Version angeben müssen.

Bisher musste PHP in der Shell immer mit folgender Pfadangabe aufgerufen werden:
PHP 5.2: /vrmd/webserver/php52/bin/php
PHP 5.3: /vrmd/webserver/php53/bin/php
PHP 5.5: /vrmd/webserver/php55/bin/php
PHP 5.6: /vrmd/webserver/php56/bin/php

Ab sofort können Sie PHP in der Shell und in Cronjobs einfach mittels “php” aufrufen, wobei Sie je nach Server PHP in Version 5.3 bzw. 5.5 nutzen.

Falls Ihr PHP-Script nicht mit der Default-PHP-Version des Webservers kompatibel ist, müssen Sie jedoch weiterhin den vollen Pfad zu einer kompatiblen PHP-Version angeben.