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.

Erwähnungen

Schreibe einen Kommentar

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

Falls du auf diesen Beitrag mit einem Artikel auf deiner eigenen Webseite geantwortet hast, kannst du hier die URL deines Beitrags eingeben. Dabei sollte es sich um die Permalink-URL handeln. Deine Antwort wird dann (möglicherweise nach der Moderation) auf dieser Seite angezeigt. Falls du deine Antwort aktualisieren oder entfernen möchtest, aktualisiere oder lösche deinen Beitrag auf deiner eigenen Webseite und gib die URL des Beitrags erneut ein. (Erfahre mehr über Webmentions.)