Seit einiger Zeit hatte ich noch eine Installation von OpenX auf Version 2.8.7. Das Update auf 2.8.8 wurde Zeit, da die neue Version eine Sicherheitslücke schließt. Allerdings kann man das Ausnutzen der meisten Sicherheitslücken in OpenX unterbinden, indem man den Zugriff auf das Admin-Interface (/www/admin) via htaccess einschränkt.
Nach dem Update auf Version 2.8.8 musste ich aber feststellen, dass OpenX nur noch leere Stylesheets und JavaScript-Dateien auslieferte. Die Styles und Scripte werden über den Minimizer Minify zusammengefasst. Minify cached die erstellen Dateien auf dem Server, bei OpenX im üblichen Filecache unter /var/cache. Die gecachten Dateien waren allerdings allesamt leer. Zudem wurden beim ersten Request Stylesheets und Scripte korrekt ausgeliefert. Bei weiteren Aufrufen (Browsercache beachten!) wurden die leeren Cachefiles ausgeliefert.
Es war also recht schnell klar, dass der Fehler in den leeren Cachefiles liegt. Diese enstanden dadurch, dass OpenX Minify für den Filecache erlaubt, die Dateien für Schreibzugriffe zu sperren. Filelocking ist in Kombination mit einem NFS natürlich eine schlechte Idee, weil NFS sowas nicht unterstützt. Daher konnten die Cachedateien nicht korrekt geschrieben werden.
OpenX lässt den Anwender dies aber nicht konfigurieren, weshalb man den Fehler direkt im Code beheben muss. Hier die Lösung des Problems:
--- /lib/OX/Admin/UI/Minify/Server.php
+++ /lib/OX/Admin/UI/Minify/Server.php
@@ -12,7 +12,7 @@
// try to disable output_compression (may not have an effect)
ini_set('zlib.output_compression', '0');
- Minify::setCache(OX_PATH. '/var/cache', true);
+ Minify::setCache(OX_PATH. '/var/cache', false);
if (isset($_GET['g'])) {
// serve!
Das gleiche Problem besteht auch beim normalen Cache. Hier die Lösung:
--- /lib/pear/Cache/Lite.php
+++ /lib/pear/Cache/Lite.php
@@ -62,7 +62,7 @@
*
* @var boolean $_fileLocking
*/
- var $_fileLocking = true;
+ var $_fileLocking = false;
/**
* Timestamp of the last valid cache