re stangelanda at gmail dot com
I have tested this on Windows XP SP3, PHP Version 5.2.5 and I got a warning:
filesize() stat failed for $filename on the second call to the filesize() function
ie it worked as I would expect so unless the bug has been introduced since then - no bug.
clearstatcache
(PHP 4, PHP 5)
clearstatcache — Libera la cache dello stato di un file
Descrizione
Quando si eseguono le funzioni di sistema stat
o
lstat
o una delle funzioni elencate nella
lista delle funzioni coinvolte (vedi sotto), il PHP memorizza le informazioni restituite
da queste funzioni in modo da fornire migliori performance. Esistono, tuttavia,
casi in cui si desidera rimuovere le informazioni memorizzate. Ad esempio,
nel caso in cui un file venga controllato più volte nel medesimo script ed il file si trova in situazioni
in cui possa venire rimosso o possa essere variato durante l'esecuzione dello script; in questi casi
si può volere cancellare le informazioni memorizzate. Per queste situazioni si può utilizzare la funzione
clearstatcache() che cancella le informazioni memorizzate dal PHP sullo
stato di un file.
Occorre notare che il PHP non memorizza informazioni su file inesistenti. Pertanto se si esegue la funzione file_exists() su un file che non esiste, questa restituisce FALSE fino a quando il file non viene creato. Un volta ccreato il file, la funzione restituisce TRUE anche se il file viene cancellato.
Nota: Queste funzioni memorizzano informazioni su specifici file, pertanto basta eseguire clearstatcache() nel caso di molteplici operazioni sul medesimo file oppure nel caso sia necessario non memorizzare informazioni su un dato file.
Tale valore viene memorizzato solo per la durata di una singola richiesta.
Le funzioni coinvolte sono stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype() e fileperms().
clearstatcache
26-Sep-2008 02:49
07-Aug-2008 03:58
Regarding the previous user note, the docs say that calling unlink() for a file will clear any stats cache for that file. If you're seeing the described windows behavior it sounds like a possible PHP bug or doc bug.
24-Jan-2008 09:35
It should be noted that a call to any of those functions will cache all of the file's information, not just the information that is returned.
Obviously it is clear that the following requires you to clear the cache.
<?php
$size1 = filesize($filename);
unlink($filename);
$size2 = filesize($filename);
// $size2 still equals $size1, unless you cleared the stat cache in between.
?>
<?php
$access = fileatime($filename);
unlink($filename);
$size = filesize($filename);
// $size will be the filesize before it was unlinked, because the filesize was cached when fileatime was called, even though the two functions wouldn't appear to have anything to do with either other.
?>
Confirmed on a windows system.
