PHP OPCache für bestimmte Verzeichnisse deaktivieren

PHP OPCache für Ordner deaktivierenIn diesem Artikel möchte ich euch zeigen wie man das Caching mittels OPCache für bestimme Verzeichnisse deaktivieren kann. (Wer vorab noch einen kurzen Einstieg in das Thema OPCache braucht, scrollt am besten bis zum blauen Kästchen in diesem Artikel vor.) Zwar ist OPCache in fast allen Fällen eine gute Idee und dessen Verwendung begrüßenswert, jedoch gibt es wie in fast allen Dingen auch hier Ausnahmen. Vorallem, wenn es um die Entwicklung geht oder wenn ein Bugfix getestet werden soll, kann es Sinn machen OPCache zu deaktivieren.

Da auf dem Webserver jedoch oftmals noch andere Projekte laufen, die von  OPCache profitieren, kann eine komplette Deaktivierung von OPCache für solche Testfälle keine Option sein. Deshalb geht es in diesem Artikel darum, wie man OPCache auf Verzeichnis-Ebene deaktivieren kann.

Kurz und knapp: Was ist PHP OPCache? OPCache ist eine Erweiterung für PHP, welches die Ausführung von PHP-Skripten durch Caching des Bytecodes beschleunigt. Wird ein PHP-Skript aufgerufen, wird dieses zuerst in plattformunabhängigen Bytecode übersetzt, um dann von der Zend Engine in Maschinencode übersetzt zu werden. Die Übersetzung von Skript zu Bytecode geschieht normalerweise bei jedem Aufruf des Skripts. An dieser Stelle setzt OPCache an und legt den vorkompilierten Bytecode im Arbeitsspeicher ab. Bei erneutem Aufruf eines Skripts wird dieses nicht zeitintensiv erneut in Bytecode übersetzt, sondern der bereits übersetzte Bytecode durch OPCache aus dem Arbeitsspeicher geladen.

Da nun klar sein sollte, was OPCache macht und warum wir nur vereinzelte Verzeichnisse deaktivieren wollen, kommen wir zur Umsetzung unseres Vorhabens.

OPCache für Verzeichnis deaktivieren

Um OPCache auf Verzeichnisebene zu deaktivieren, kann eine sogenannte Blacklist erstellt werden. Diese Blacklist ist eine Textdatei die beliebig viele Datei- und/oder Verzeichnispfade enthalten kann, welche nicht durch OPCache gecached werden sollen. Für unser Beispiel wollen wir das Verzeichnis /var/www/developer sowie die Datei /var/www/dynamic_values.php vom Caching ausschließen. Dazu legen wir eine Blacklist-Datei mit folgendem Inhalt an.


/var/www/developer/*
/var/www/dynamic_values.php

(Die * Wild-Card ist zu beachten, damit alle Dateien im Verzeichnis ausgenommen werden.)

Wo die Datei gespeichert wird, spielt keine Rolle, da wir den Speicherort in der OPCache-Konfiguration frei definieren können. Dies ist zugleich auch der nächste Schritt. Öffnet die OPCache-Konfigurationsdatei mit einem Texteditor. (Auf meinem Server befindet sich die Konfiguration z.B. im Verzeichnis: /etc/php5/fpm/conf.d)


nano /etc/php5/fpm/conf.d/05-opcache.ini

Am Ende der Datei fügt ihr folgenden Paramter mit Pfadangabe zu eurer Blacklist-Datei ein:


opcache.blacklist_filename=/etc/php5/fpm/opcache-blacklist.txt

Das war es schon. Damit die Blacklist angezogen wird, sollte PHP noch einmal neugestartet werden. In meinem Fall, bei Verwendung von PHP-FPM, ist hierzu folgender Befehl nötig:


service php5-fpm restart

Wenn alles geklappt hat, sind nun sowohl das Developer-Verzeichnis als auch die dynamic_values.php-Datei vom OPCache ausgenommen. Bei Fragen, Kritik oder Ideen gilt wie immer – ab in die Kommentare damit. Viel Spaß beim Nachbauen!

Raffi

Seit 2011 blogge ich hier über Programmierung, meine Software, schreibe Tutorials und versuche mein Wissen, so gut es geht, mit meinen Lesern zu teilen.

2 Kommentare

  1. I’m really loving the new Zune, and hope this, as well as the excellent reviews some other people have written, will help you decide if it’s the right choice for you.

  2. Banyo Aynasısays:

    Danke für die Mühe, die Sie gemacht haben, um das alles zusammenzutragen.

    MfG Banyo

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Sie dient nur dem Spamschutz.