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 — Vymaže cache obsahujúcu stav súborov
Popis
Pri používaní stat(), lstat(), či ďalších funkcií v doleuvedenom zozname PHP ukladá návratové hodnoty týchto funkcií do cache (vyrovnávacej pamäte), čím je zaistený lepší výkon. Napríklad, ak je nejaký súbor kontrolovaný v tom istom skripte viackrát a počas vykonávania tejto funkcie môže byť tento súbor súbor nejakým spôsobom zmenený alebo odstránený, je vhodné vymazať stavovú cache. V týchto prípadoch treba použiť funkciu clearstatcache() na vymazanie informácií o tomto súbore v pamäti cache.
Note: Táto funkcia si ukladá informácie o niektorých súboroch do cache pamäte, preto je potrebné zavolať clearstatcache(), ak je vykonávaných viacero operácií na rovnakom súbore a nie je vhodné aby bola informácia o tomto súbore ukladaná v pamäti cache.
Zoznam funkcií, ktorých výsledky môžu byť cacheované: stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype() a fileperms().
clearstatcache
26-Sep-2008 05:49
06-Aug-2008 06: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 12: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.
