pfSense PHP-Falle: disabled:'' deaktiviert deine Firewall-Regel lautlos

Firewall-Regel via PHP in config.xml geschrieben, filter_configure() aufgerufen, pf zeigt nichts. Kein Fehler, keine Warnung. Der Grund: ein leerer PHP-String im ‘disabled’-Key. Ein isset()-Gotcha das Stunden kostet.

27.02.2026 · 2 Minuten · 384 Wörter · root_cause

Python ldap3: invalidCredentials obwohl das Passwort stimmt

ldapwhoami bindet erfolgreich, Python ldap3 liefert invalidCredentials — mit identischen Credentials. Die Ursache: Sonderzeichen (@, !) im Passwort. libldap überträgt sie korrekt, ldap3 nicht.

22.02.2026 · 3 Minuten · 501 Wörter · root_cause

Python: {{ }} außerhalb von f-Strings generiert keinen Escape — ein stiller Code-Bug

Ein Python-Script generiert Ruby-Code mit Blöcken. Manche Strings sind f-Strings, manche nicht. {{ }} sollte zu { } werden — tut es aber nur in f-Strings. In normalen Strings bleiben {{ }} literal. Das erzeugt ungültiges Ruby, Python wirft keinen Fehler, und das Programm schlägt still fehl.

19.02.2026 · 4 Minuten · 671 Wörter · root_cause

PHPMailer SMTP auth schlägt fehl, curl geht — der `!`-Passwort-Trick

PHPMailer kann sich nicht per SMTP authentifizieren, obwohl curl mit denselben Credentials funktioniert. Die überraschende Ursache: Bash-History-Expansion verwandelt ! heimlich in \! — und PHP kennt diesen Trick nicht.

19.02.2026 · 5 Minuten · 981 Wörter · root_cause

JavaScript Smooth-Scroll: Die offsetTop-Falle bei verschachtelten Elementen

Du baust einen eigenen Smooth-Scroll-Handler und er funktioniert perfekt – bis er es nicht tut. Anker-Links auf tief verschachtelte Elemente scrollen nach ganz oben statt zum Ziel. Die Ursache: offsetTop lügt dich an.

19.02.2026 · 4 Minuten · 847 Wörter · root_cause

data-i18n und textContent: Warum deine Spans spurlos verschwinden

Du baust eine hübsche Wortmarke mit verschiedenen Spans, aber nach dem Laden der Seite sind die Spans weg. Schuld ist ein einziger Zeile in deiner i18n-Library: element.textContent = translation. Hier ist warum – und wie du es löst.

17.02.2026 · 3 Minuten · 627 Wörter · root_cause

CSS transform:scale() und Überlappungen – drei falsche Diagnosen bis zum Fix

Eine skalierte CSS-Card überlappt den nächsten Abschnitt. z-index hilft nicht, padding auch nicht. Warum margin-bottom der einzige echte Fix ist – und was transform:scale() eigentlich mit dem DOM macht.

17.02.2026 · 4 Minuten · 773 Wörter · root_cause

CalDAV in Python: Warum deine Query 63 Events zurückgibt, obwohl nur eins heute stattfindet

CalDAV gibt bei wiederkehrenden Terminen ALLE Events zurück, nicht nur die heutigen. Warum DTSTART dich belügt und wie du RRULE mit dateutil richtig auswertest.

23.01.2025 · 6 Minuten · 1202 Wörter · root_cause