PHP:clearstatcache()无法正常工作

时间:2011-12-04 19:59:16

标签: php file-exists

我的工作流程非常简单:

  1. 我删除了一个文件
  2. 我致电clearstatcache()
  3. 我保存了一个新文件
  4. 我致电clearstatcache()
  5. 最后,is_file()返回false一段时间,然后在我稍后刷新10秒后决定返回true

    看起来像是缓存问题,不是吗?

    这是我的一段代码:

    // step 1
    $path = 'file_to_delete.jpg';
    unlink($path);
    
    // is_file($path) returns false here -- normal behavior
    // step 2
    clearstatcache();
    
    // step 3 -- some stuff going on on an uploaded image, that leads to:
    imagejpeg($imagetosave, $path, 80);
    
    // step 4
    clearstatcache();
    
    // is_file() returns false, i have to wait a couple of seconds before it starts returning true
    

    感谢您的帮助!

    修改

    鉴于我的所有答案,问题不是 似乎 来自clearstatcache()

    但是,如果我添加,当我覆盖文件(因此其现有的状态不会改变)时,is_file()会返回良好的结果。但当其现有状态实际发生变化时,就会出现问题。如果错误不是来自clearstatcache(),那会很奇怪,对吗? (或确实与此缓存有关的东西)

1 个答案:

答案 0 :(得分:2)

我同意@hakre,检查创建/删除的结果。

即使拉斯穆斯自己recommends it

,也不是快而肮脏的
  

[2011-03-31 08:34 UTC] rasmus@php.net

     

你们发现stat缓存是按请求的,对吧?只有你   如果你A,需要在file_exists()调用之前清除stat缓存。   为它做了一个统计,并且B.在这个上创建或删除了它   请求。在这种情况下,您不需要再次对其进行统计   create / delete的成功状态将告诉您文件是否为   有没有。也许对于长期运行的守护进程或类似的东西   变得更成问题,但对于典型的Web请求,stat缓存   通常会为您节省数十个系统调用。

如果你真的坚持使用clearstatcache(),那么我想到的唯一的事情(除写缓存之外)是,你有一个非常巨大的上传文件夹,包含数千个文件。

在一个文件夹中包含许多文件肯定会减慢重新说明的速度。

如果是这样,请尝试减少文件数量以获得统计效果,例如通过创建多个文件夹,为上传文件名的每个初始字符添加一个文件夹,例如upload/a/upload/b/等。