Nun habe ich meine Prüfung ja schon mal abgelegt und bin auch fleißig dabei die in der Lernphase liegengebliebene (oder vernachlässigte) Arbeit aufzunehmen. Wie ich am Samstag schon schrieb, gehören dazu einige Projekte und Probleme welche die von mir betreuten Webauftritte mir aufbürden und ein Problem plagt mich, etwa seit dem letzten Update von WordPress auf Version 2.7.1 ganz besonders: Sporadisch verweigern einige Beiträge welche PHP Scripte enthalten die Ausführung von diesen. Bei einigen kann ich nachvollziehen, was da wohl schief lief1, das Verhalten das andere Seiten zeigen würde mein Kollege Jean-Paul wohl als “paranormal” bezeichnen. Aber der Reihe nach:
Als ich dazu überging, WordPress einzusetzen konnte die neue Software längst nicht alle Bedürfnisse nach dynamischen Inhalten befriedigen, ich war und bin immer noch auf selbst geschriebene PHP-Programme angewiesen. Zunächst setzte ich dazu nur statische Seiten ein dann die Software RunPHP und vor wenigen Monaten stieg ich auf PHP-Exec um.
Nun musste ich, nach dem Update auf WordPress 2.7.1 feststellen, dass an nicht wenigen Stellen
- statt der berechneten HTML Seiten der PHP Code angezeigt wurde,
- oder die Seiten, je nach Hoster, Fehlermeldungen oder eine weiße Seite anzeigen.
Für einige Seiten konnte ich eine (mögliche) Erklärung finden:
Auf einige Seiten waren die Escapes’ “\” entfernt worden, wodurch der Code fehlerhaft wurde. Etwa wird in einer Zeile wie:
echo "<a href=\"#".chr($i)."\">".strtoupper(chr($i))."</a> |";
ohne das Escape vor den Gänsefüsschen nach href= nicht als Teil der Zeichenkette die auszugebender Zeile interpretiert, sondern als neuer Befehl, also müsste ein ; oder ein . folgen.
Ich vermute, diese \ verschwanden bereits vor einiger Zeit, als ich sowohl auf aachen.lu und auf wiesel.lu ein Update einspielte. Diese Seiten konnten wieder zum Funktionieren gebracht werden, indem ich die, nicht gerade seltenen Stellen, umformulierte, so dass keine \ mehr vorkommen. Entweder:
echo '<a href="#".chr($i)."">".strtoupper(chr($i))."</a> |';
oder sauberer
<a href="#"<php echo chr($i) ?><php echo strtoupper(chr($i)) ?>"</a> |';
Was auch die Lesbarkeit erhöht weil zwischen Datenberechnung und Datenausgaber besser unterschieden wird. Einer der Gründe, warum ich es zuvor überhaupt anders formuliert hatte war aber der, dass RunPHP damals mit der Form nicht klar kam.
Andere Phänomene kann ich mir dagegen nicht erklären etwa den, dass ich Seiten hab, die auch nach Verbesserung des Codes nicht wieder zum Ausführen bewegt werden können. Wenn ich dagegen hingehe, und die Seite mit genau demselben Inhalt neu anlege, dann funktioniert es! Das klingt nach einen leicht applizierbarem Workaround. Leider waren davon gerade Seiten betroffen, die viele Unterseiten haben 🙁
Wie komme ich aus dem Schlammassel wieder raus? Vor allem, was kann ich tun, dass ich nach dem nächsten Update nicht schon wieder so blöd dastehe?
- Ich muss grössere Programmteile in Plugins auslagern, so dass Exec-PHP nur kurze Statements ausführen muss
- Für Aufrufe, die häufiger vorkommen, werde ich versuchen, Filter zu schreiben, die dann im Plugin mit
<?php add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1); ?> aktiviert werden können. Etwa
<manifestations /> für den Veranstaltungskalender meiner Vereinshomepage.