You are here

public function FileCache::getMultiple in Service Container 7

Same name and namespace in other branches
  1. 7.2 lib/Drupal/Component/FileCache/FileCache.php \Drupal\Component\FileCache\FileCache::getMultiple()

Gets data based on filenames.

Parameters

string[] $filepaths: List of file paths used as cache identifiers.

Return value

array List of cached data keyed by the passed in file paths.

Overrides FileCacheInterface::getMultiple

1 call to FileCache::getMultiple()
FileCache::get in lib/Drupal/Component/FileCache/FileCache.php
Gets data based on a filename.

File

lib/Drupal/Component/FileCache/FileCache.php, line 82
Contains \Drupal\Component\FileCache\FileCache.

Class

FileCache
Allows to cache data based on file modification dates.

Namespace

Drupal\Component\FileCache

Code

public function getMultiple(array $filepaths) {
  $file_data = [];
  $remaining_cids = [];

  // First load from the static cache what we can.
  foreach ($filepaths as $filepath) {
    if (!file_exists($filepath)) {
      continue;
    }
    $realpath = realpath($filepath);

    // If the file exists but realpath returns nothing, it is using a stream
    // wrapper, those are not supported.
    if (empty($realpath)) {
      continue;
    }
    $cid = $this->prefix . ':' . $this->collection . ':' . $realpath;
    if (isset(static::$cached[$cid]) && static::$cached[$cid]['mtime'] == filemtime($filepath)) {
      $file_data[$filepath] = static::$cached[$cid]['data'];
    }
    else {

      // Collect a list of cache IDs that we still need to fetch from cache
      // backend.
      $remaining_cids[$cid] = $filepath;
    }
  }

  // If there are any cache IDs left to fetch from the cache backend.
  if ($remaining_cids && $this->cache) {
    $cache_results = $this->cache
      ->fetch(array_keys($remaining_cids)) ?: [];
    foreach ($cache_results as $cid => $cached) {
      $filepath = $remaining_cids[$cid];
      if ($cached['mtime'] == filemtime($filepath)) {
        $file_data[$cached['filepath']] = $cached['data'];
        static::$cached[$cid] = $cached;
      }
    }
  }
  return $file_data;
}