file_put_contents (), воздействующий на fileatime () других файлов в каталоге

Я столкнулся с действительно странной ошибкой, которую безуспешно пытался устранить последние несколько дней. я имею класс для кэширования вызовов API, и класс, используемый в плагине WordPress для создания пользовательских конечных точек API. Вкратце плагин 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 на самом деле касаясь каждого из этих файлов (я видел 12 из 18 для одного нового файла).

Вещи, которые я пробовал

  • clearstatcache() звонки абсолютно везде)
  • Делать все вручную fopen(), fwrite(), fflush(), fclose() шаги вручную
  • Написание имен файлов пишется в точке file_put_contents() вызов

Если у кого-то есть идея, что здесь происходит, я буду muuuch признательна.

0

Решение

После недели написания тестов и воссоздания этой проблемы с помощью простого звонка file_put_contents()Я нашел источник этой проблемы. Будьте готовы к этому … Центр внимания индексирует эти файлы. Исключил из Spotlight, удалил файлы кеша, запустил заново, проблем нет.

введите описание изображения здесь

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]