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

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)