Vorsicht vor PHP-Funk­tio­nen mit ge­cach­tem Er­geb­nis

Letzte Woche haben Angelo und ich an einem WP-CLI-Command gearbeitet und bei der Erstellung der Behat-Tests zufällig fehlschlagende und erfolgreiche Tests gehabt. Nach einigem Debugging sind wir dann auf die Idee gekommen, ob das Ergebnis der PHP-Funktion is_dir(), die prüft ob ein Verzeichnis existiert, vielleicht zwischengespeichert wird.

Und tatsächlich, in der php.net-Doku zu is_dir() heißt es:

»Note: The results of this function are cached. See clearstatcache() for more details.«

php.net-Doku zur is_dir()-Funktion.

Unsere Reaktion sah, vorsichtig formuliert, so aus: 🤯

Ja, vielleicht gibt es Fälle, in denen das Cachen des Ergebnisses von PHP-Funktionen sinnvoll ist, unserer war davon aber sehr weit entfernt. Also haben wir unseren Code mit clearstatcache()-Aufrufen ausgerüstet, um vor dem Aufruf von is_dir() potenziell zwischengespeicherte Ergebnisse zu entfernen.

In der Doku zu clearstatcache() sind noch einige weitere Funktionen aufgelistet, deren Ergebnisse ebenfalls gecacht werden, zum Beispiel file_exists() oder is_file(). Oh, und noch etwas, das vielleicht etwas seltsam ist: das Ergebnis der Funktionen wird nur gecacht, wenn die übergebenen Dateien oder Verzeichnisse existieren.

6 Reaktionen zu »Vorsicht vor PHP-Funk­tio­nen mit ge­cach­tem Er­geb­nis«

Reposts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert