После некоторых тестов я думаю, что функция fstat () вычисляет размер, потому что он намного быстрее, чем filesize () с clearstatcache ().
код:
for (/*loop for 10 000 files*/) {
fwrite($fp, '123');
$fstat=fstat($fp);
fwrite($fp, '123');
$fstat=fstat($fp);
fwrite($fp, '123');
$fstat=fstat($fp);
}
аналогично (в предыдущем исполнении):
// 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);
}
быстрее чем:
// 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);
}
и чем:
// 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);
}