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 zuris_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