今天在测试 SAE (Sina App Engine) 的Memcache Wrapper 时发现,PHP会在同一个页面的执行过程中对文件的元信息进行缓存。
根据PHP文档对 clearstatcache() 这个方法的说明得知:
在使用 stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype(), 或 fileperms() 方法查询文件信息时,PHP会将文件的stat的缓存以提高性能。 clearstatcache()方法可以用来清除这个缓存。另外unlink()会自动清除stat缓存。
例如以下一段程序:
1 2 3 4 5 6 | file_put_contents("test.txt", "test_content\n"); var_dump(filesize("test.txt")); file_put_contents("test.txt", "test_content\n", FILE_APPEND); var_dump(filesize("test.txt")); clearstatcache(); var_dump(filesize("test.txt")); |
最后会输出
int(13) int(13) int(26)
但是通过阅读PHP源码,我发现只有在对本地文件进行unlink, rename和rmdir操作时会清除stat缓存,而在通过其他的wrapper进行unlink, rename和rmdir操作时,并不会清除stat缓存。因此在写wrapper时我们要自己在unlink等方法中通过clearstatcache()来清除stat。
php真坑可真隐蔽
您好,可以给我一份新浪 sae 的邀请么?谢谢 我信箱 uuvv@sina.cn
你好,你可以注册体验帐号来试用,或者去新浪微博找 @Easy 申请
深奥啊
学无止境
确实是不错~~~~~
好久没更新了。。
@相宜本草
最近比较懒…
暂时用不上,学习了
php不错啊
以后说不定可以用到,先收藏着