php中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()函数都是存在缓存的,在同一个会话中都是读取的缓存,因此我们获取的结果再长生命周期中可能出现问题,例如判断文件夹是否存在
while (true) { var_dump(is_dir('./demo')); sleep(2); }
上面的文件夹存在,因此输出ture,当我人工删除的时候,它依然返回true
如果想要获取正确可以通过加上清除缓存函数clearstatcache来处理:
while (true) { clearstatcache(); var_dump(is_dir('./demo')); sleep(2); }
此时获取的状态就是最实时的正确的。