L'appel à la fonction stat() ou lstat() est relativement coûteux en termes de temps d'exécution. Pour cela, le résultat du dernier appel à l'une des fonctions de statut, (voir la liste ci-dessous), est sauvegardé pour réutilisation ultérieure. Pour forcer la vérification du statut d'un fichier, dans le cas où le fichier aurait pu être modifié ou aurait disparu, il faut utiliser la fonction clearstatcache() afin d'effacer de la mémoire les résultats du dernier appel à la fonction.
Il est à noter que PHP ne met pas en cache les informations concernant
un fichier inexistant. Si l'on appelle file_exists()
sur un fichier qui n'existe pas, la fonction retourne false
jusqu'à ce que l'on crée le fichier. Si l'on crée le fichier,
la fonction retourne true même si l'on efface le fichier.
Cependant, unlink() efface automatiquement le cache.
Note:
Cette fonction met en cache des informations sur les fichiers. Il n'est donc nécessaire d'appeler clearstatcache() que si l'on fait des opérations multiples sur le même fichier, et que l'on souhaite avoir une version récente des informations.
Les fonctions affectées incluent : stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype(), et fileperms().
clear_realpath_cacheSi l'on doit aussi vider le cache des chemins réels.
filename
Nettoie le cache de chemin réel d'un fichier spécifique.
Ne peut être utilisé que si le paramètre
clear_realpath_cache vaut true.
Aucune valeur n'est retournée.
Exemple #1 Exemple avec clearstatcache()
<?php
$file = 'output_log.txt';
function get_owner($file)
{
$stat = stat($file);
$user = posix_getpwuid($stat['uid']);
return $user['name'];
}
$format = "UID @ %s: %s\n";
printf($format, date('r'), get_owner($file));
chown($file, 'ross');
printf($format, date('r'), get_owner($file));
clearstatcache();
printf($format, date('r'), get_owner($file));
?>Résultat de l'exemple ci-dessus est similaire à :
UID @ Sun, 12 Oct 2008 20:48:28 +0100: root UID @ Sun, 12 Oct 2008 20:48:28 +0100: root UID @ Sun, 12 Oct 2008 20:48:28 +0100: ross