file_put_contents()影响目录

时间:2016-01-24 01:52:10

标签: php wordpress file-access file-put-contents

我遇到了一个非常奇怪的错误,过去几天我一直试图解决这个问题,但没有成功。我有a class for caching API calls,以及WordPress插件中用于创建自定义API端点的类。在一个nutshull中,WordPress插件访问外部API并使用我的缓存类缓存结果。使用api访问许多单独的项目,导致几十个本地缓存文件。

场景

在我的缓存类中,如果本地缓存已过期(它比实例化时设置的过期时间早),API会再次被命中,结果会被缓存:

file_put_contents($this->cache, $this->data, LOCK_EX);

在我的WordPress插件中,我想遍历缓存文件并删除任何N天未访问的文件。这个方法使用cron命中。我正在检查访问时间(这仍在开发中,打印用于调试):

print($file . ': ' . date('F jS Y - g:i:s A', fileatime(UPLOADS_DIR . '/' . $file)));

到目前为止,这是完整的方法:

public static function cleanup_old_caches($days = 30) {

    // Get the files
    $files = scandir(UPLOADS_DIR);

    // Save out .txt files
    $cache_files = array();

    // Loop through everything
    foreach ( $files as $file ) {
        if ( strstr($file, '.txt') ) {
            $cache_files[] = $file;
        }
    }

    // Loop through the cache files
    foreach ( $cache_files as $file ) {

        clearstatcache();
        print($file . ': ' . date('F jS Y - g:i:s A', fileatime(UPLOADS_DIR . '/' . $file)));
        echo "\n";
        clearstatcache();

    }

    return '';

}

你会注意到我现在有几个clearstatcache()电话。

问题

每次创建新的缓存文件时,fileatime()为同一目录中的许多其他文件报告的访问时间将更新为当前时间。这些有时会在新缓存文件之后再说一秒。

这是我的完整方法:

private function hit_api() {

    // Set the return from the API as the data to use
    $this->data = $this->curl_get_contents($this->api_url);

    // Store the API's data for next time
    file_put_contents($this->cache, $this->data, LOCK_EX);

}

我可以找到另一种编写清理逻辑的方法,但我担心PHP 实际触及这些文件(我已经看到18个中的12个用于一个新文件)。

我尝试过的事情

  • clearstatcache()绝对调用_everywhere)
  • 手动手动执行所有fopen()fwrite()fflush()fclose()步骤
  • file_put_contents()调用
  • 的位置写入正在写入的文件名

如果有人知道这里发生了什么,我将 muuuch 感激。

1 个答案:

答案 0 :(得分:0)

经过一周的编写测试并使用file_put_contents()进行简单的通话重新创建此问题后,我发现了此问题的根源。准备好了...... Spotlight正在索引这些文件。从Spotlight中排除,删除了缓存文件,再次启动,没有问题。

enter image description here