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.