关于PHP对文件元信息的缓存

今天在测试 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。

发表评论?

13 条评论。

  1. php真坑可真隐蔽

  2. 您好,可以给我一份新浪 sae 的邀请么?谢谢 我信箱 uuvv@sina.cn

  3. 确实是不错~~~~~

  4. 关于PHP对文件元信息的缓存 - pingback on 2010 年 09 月 04 日 在 10:07
  5. 关于PHP对文件元信息的缓存 @ 菜刀会 - pingback on 2010 年 09 月 15 日 在 11:43
  6. 暂时用不上,学习了

  7. 夏客行 » 关于PHP对文件元信息的缓存 - pingback on 2010 年 12 月 02 日 在 09:44
  8. 以后说不定可以用到,先收藏着

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackbacks and Pingbacks: