以下代码是我编写的PHP web服务的一部分。它获取一些上传的Base64数据,对其进行解码,并将其附加到文件中。这一切都运行得很好。
问题是,当我读取附加操作之后的文件大小时,我得到了附加操作之前的文件大小。
$fileOut = fopen($filepath.$filename, "ab")
fwrite($fileOut, base64_decode($data));
fflush($fileOut);
fclose($fileOut);
$newSize = filesize($filepath.$filename); // gives old file size
我做错了什么?
系统为:
发布于 2010-09-20 08:12:31
在基于Linux的系统上,filesize()
获取的数据是“状态缓存”的。
尝试在调用filesize之前调用clearstatcache();
。
发布于 2010-09-20 08:12:10
根据PHP手册:
此函数的结果被缓存。有关详细信息,请参阅clearstatcache()。
http://us2.php.net/manual/en/function.filesize.php
基本上,您必须在文件操作之后清除stat缓存:
$fileOut = fopen($filepath.$filename, "ab")
fwrite($fileOut, base64_decode($data));
fflush($fileOut);
fclose($fileOut);
clearstatcache();
$newSize = filesize($filepath.$filename);
发布于 2010-09-20 08:12:37
PHP将它读取的所有文件元数据存储在缓存中,因此很可能文件大小已经存储在该缓存中,您需要清除它。在调用filesize
之前,请查看clearstatcache并调用它。
https://stackoverflow.com/questions/3747982
复制相似问题