The assumption should be that if the files directory moves, the simplepie cache directory moves with it. Not so, if the old files directory continues to exist.

Steps to reproduce:

1) create site with files directory in sites/default/files,
-> parser simplepie points to sites/default/files/simplepie_cache
2) copy site db, copy files directory to sites/copy1/files
3) change file settings in copy1 site so that the files directory points to sites/copy1/files
-> parser simplepie still points to sites/default/files/simplepie_cache

The reason is because cache location is cached until the directory it points to isn't valid anymore:

/**
 * Set the default caching directory if the current setting is not useable
 */
function _parser_simplepie_sanitize_cache() {
  $cache_location = variable_get('parser_simplepie_cache', FALSE);
  if (!is_writeable($cache_location) || !is_dir($cache_location) || !$cache_location !== FALSE) {
    $cache_location = file_create_path(file_directory_path() . '/simplepie_cache');
    if (!file_exists($cache_location) && is_writable(file_directory_path())) {
      mkdir($cache_location);
    }
    if (!is_writeable($cache_location)) {
      return FALSE;
    }
    variable_set('parser_simplepie_cache', $cache_location);
  }
  return $cache_location;
}

Can't we do the following instead?

/**
 * Set the default caching directory if the current setting is not useable
 */
function _parser_simplepie_sanitize_cache() {
  $cache_location = file_directory_path() . '/simplepie_cache';
  if (!is_writeable($cache_location) || !is_dir($cache_location) || !$cache_location !== FALSE) {
    $cache_location = file_create_path($cache_location);
    if (!file_exists($cache_location) && is_writable(file_directory_path())) {
      mkdir($cache_location);
    }
    if (!is_writeable($cache_location)) {
      return FALSE;
    }
  }
  return $cache_location;
}

Comments

aron novak’s picture

Status: Active » Fixed

This problem was at parser_common_syndication too. Now it's fixed.

Anonymous’s picture

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for two weeks with no activity.