After some tests I think the function fstat() calculates the size because it is much more faster than filesize() with clearstatcache().
The code:
for (/*loop for 10 000 files*/) {
fwrite($fp, '123');
$fstat=fstat($fp);
fwrite($fp, '123');
$fstat=fstat($fp);
fwrite($fp, '123');
$fstat=fstat($fp);
}
is similar (in preformance) to:
// Here filesize() is BUFFERED and gives wrong results
for (/*loop for 10 000 files*/) {
fwrite($fp, '123');
$fsize=filesize($filename);
fwrite($fp, '123');
$fsize=filesize($filename);
fwrite($fp, '123');
$fsize=filesize($filename);
}
is faster than:
// Here filesize() reads size on every call
for (/*loop for 10 000 files*/) {
fwrite($fp, '123');
clearstatcache();
$fsize=filesize($filename);
fwrite($fp, '123');
clearstatcache();
$fsize=filesize($filename);
fwrite($fp, '123');
clearstatcache();
$fsize=filesize($filename);
}
and than:
// Here filesize() reads size on every call
for (/*loop for 10 000 files*/) {
fwrite($fp, '123');
clearstatcache(true, $filename);
$fsize=filesize($filename);
fwrite($fp, '123');
clearstatcache(true, $filename);
$fsize=filesize($filename);
fwrite($fp, '123');
clearstatcache(true, $filename);
$fsize=filesize($filename);
}