CLEARSTATCACHE |
Efface le cache de stat |
---|---|
PHP 4+ |
Syntaxe
function clearstatcache(); |
function clearstatcache($clear_realpath_cache); |
function clearstatcache($clear_realpath_cache,$filename); |
Paramètres
Nom | Description |
---|---|
$clear_realpath_cache | Ce paramètre permet d'indiquer si l'on doit vider le cache (true) ou non (false). |
$filename | Ce paramètre permet d'indiquer qu'il vider le cache du fichier spécifié sans tenir compte des autres noms de fichiers. |
Retour
Aucun
Description
Cette fonction permet d'effacer la mémoire tampon et le cache qu'utilise la fonction stat().
Remarques
- Utilité dans la gestion du cache des fichiers : La fonction clearstatcache est essentielle pour s'assurer que PHP récupère des informations à jour sur un fichier. En effet, certaines fonctions comme stat, file_exists ou filesize utilisent un cache interne pour éviter des accès répétitifs au disque, mais ce cache peut conduire à des incohérences si un fichier est modifié après un premier appel.
- Impact sur la performance : L'utilisation de clearstatcache a un coût en termes de performance, surtout si elle est appelée fréquemment dans un script. PHP utilise le cache des métadonnées de fichiers pour réduire les appels système, et vider ce cache signifie que chaque fonction d'interrogation de fichier devra accéder au système de fichiers à nouveau, ce qui peut ralentir l'exécution.
- Paramètres disponibles : Depuis PHP 5.3.0, clearstatcache accepte deux paramètres facultatifs : $clear_realpath_cache (booléen) et $filename (chaîne de caractères). Le premier permet de vider aussi le cache des chemins réels, tandis que le second cible uniquement un fichier spécifique au lieu de tout vider. Cela permet une gestion plus fine du cache sans impacter inutilement d'autres fichiers.
- Effet sur les fonctions liées aux fichiers : clearstatcache affecte principalement les fonctions qui accèdent aux métadonnées des fichiers, telles que is_file, is_dir, filemtime et filesize. Cependant, elle n'a aucun impact sur le contenu du fichier en mémoire ou sur les flux ouverts avec fopen et fread, ce qui signifie que vider le cache ne forcera pas la relecture d'un fichier déjà ouvert.
- Problèmes possibles en environnement multi-processus léger : Dans un environnement avec plusieurs requêtes exécutées simultanément (comme avec Apache ou PHP-FPM), clearstatcache ne garantit pas que toutes les requêtes verront instantanément la mise à jour des fichiers. D'autres processus PHP peuvent encore utiliser des données obsolètes, et il est parfois préférable d'utiliser des solutions alternatives comme un horodatage entreposé en cache ou en base de données.
- Effet limité sur les caches d'Opcode : clearstatcache ne purge pas les caches d'Opcode comme ceux de OPcache ou APC. Cela signifie que même après son exécution, si un fichier de script PHP a été modifié, le cache d'Opcode peut toujours servir l'ancienne version du script. Pour contourner cela, il faut utiliser des fonctions spécifiques comme opcache_reset ou apc_clear_cache.
- Problèmes dans les systèmes de fichiers réseau : Lorsqu'un script PHP accède à des fichiers stockés sur un partage réseau (par exemple via NFS ou SMB), le cache interne de PHP combiné aux caches du système de fichiers peut poser des problèmes de synchronisation. Dans ce contexte, clearstatcache ne garantit pas toujours que les informations seront immédiatement mises à jour, et il peut être nécessaire d'utiliser des solutions spécifiques au système sous-jacent.
- Exemple d'utilisation dans un script dynamique : Dans un système de gestion de fichiers en ligne où des utilisateurs téléversent ou modifient des fichiers, clearstatcache peut être utilisé après une opération pour s'assurer que les informations affichées sont correctes. Par exemple, après un unlink($fichier), appeler clearstatcache(true, $fichier) évite que file_exists($fichier) retourne true à cause du cache interne.
Références
PHP 4 - Guide du développeur, Edition First Interactive, Blake Schwendiman, 2002, ISBN: 2-84427-283-5, page 378
Dernière mise à jour : Mercredi, le 25 mars 2015