Relocating the files directory

Trying best practices I occasionally move the files directory from DRUPAL_ROOT/files/my-site.com to DRUPAL_ROOT/sites/my-sites/files

Doing this has some implications for the files table content. All file-path are pointing to the wrong location.

Quick solution for this is an mysql replace update query.

select replace(filepath, 'files/my-site/', 'sites/my-site/files/') from files;
# update files set filepath=replace(filepath, 'files/my-site/', 'sites/my-site/files/')"

Or through drush

drush sql query "select replace(filepath, 'files/my-site/', 'sites/my-site/files/') from files"
# drush sql query "update files set filepath=replace(filepath, 'files/my-site/', 'sites/my-site/files/')"

See http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_re... for more examples

Reacties

You can also use this technique if you switch from the public to private (or vice verse) filesystem. I used a few more rules though. You'll also need to do this to any other tables in which you might store a URL to the file system

<?php
/**
* Change to the private file system.
*/
function mymodule_update_9() {
 
$ret = array();
 
variable_set('file_downloads', FILE_DOWNLOADS_PRIVATE);

 

// Body
 
$ret[] = update_sql("UPDATE node_revisions SET body = REPLACE(body, 'href="<a href="https://secure.domain.com/files/'">https://secure.domain.com/files/'</a>, 'href="/system/files/')");
 
$ret[] = update_sql("UPDATE node_revisions SET body = REPLACE(body, 'href="/files/', 'href="/system/files/')");
 
$ret[] = update_sql("UPDATE node_revisions SET body = REPLACE(body, 'href="files/', 'href="/system/files/')");
 
$ret[] = update_sql("UPDATE node_revisions SET body = REPLACE(body, 'src="<a href="https://secure.domain.com/files/'">https://secure.domain.com/files/'</a>, 'src="/system/files/')");
 
$ret[] = update_sql("UPDATE node_revisions SET body = REPLACE(body, 'src="/files/', 'src="/system/files/')");
 
$ret[] = update_sql("UPDATE node_revisions SET body = REPLACE(body, 'src="files/', 'src="/system/files/')");
 
$ret[] = update_sql("UPDATE node_revisions SET body = REPLACE(body, '<a href="https://secure.domain.com/files/'">https://secure.domain.com/files/'</a>, '<a href="https://secure.domain.com/system/files/'">https://secure.domain.com/system/files/'</a>)");
 
$ret[] = update_sql("UPDATE node_revisions SET body = REPLACE(body, 'secure.domain.com/files/', 'secure.domain.com/system/files/')");

 

// Teaser
 
$ret[] = update_sql("UPDATE node_revisions SET teaser = REPLACE(teaser, 'href="<a href="https://secure.domain.com/files/'">https://secure.domain.com/files/'</a>, 'href="/system/files/')");
 
$ret[] = update_sql("UPDATE node_revisions SET teaser = REPLACE(teaser, 'href="/files/', 'href="/system/files/')");
 
$ret[] = update_sql("UPDATE node_revisions SET teaser = REPLACE(teaser, 'href="files/', 'href="/system/files/')");
 
$ret[] = update_sql("UPDATE node_revisions SET teaser = REPLACE(teaser, 'src="<a href="https://secure.domain.com/files/'">https://secure.domain.com/files/'</a>, 'src="/system/files/')");
 
$ret[] = update_sql("UPDATE node_revisions SET teaser = REPLACE(teaser, 'src="/files/', 'src="/system/files/')");
 
$ret[] = update_sql("UPDATE node_revisions SET teaser = REPLACE(teaser, 'src="files/', 'src="/system/files/')");
 
$ret[] = update_sql("UPDATE node_revisions SET teaser = REPLACE(teaser, 'secure.domain.com/files/', 'secure.domain.com/system/files/')");
 
$ret[] = update_sql("UPDATE node_revisions SET teaser = REPLACE(teaser, 'secure.domain.com/files/', 'secure.domain.com/system/files/')");

 

// comments
 
$ret[] = update_sql("UPDATE comments SET comment = REPLACE(comment, 'href="<a href="https://secure.domain.com/files/'">https://secure.domain.com/files/'</a>, 'href="/system/files/')");
 
$ret[] = update_sql("UPDATE comments SET comment = REPLACE(comment, 'href="/files/', 'href="/system/files/')");
 
$ret[] = update_sql("UPDATE comments SET comment = REPLACE(comment, 'href="files/', 'href="/system/files/')");
 
$ret[] = update_sql("UPDATE comments SET comment = REPLACE(comment, 'src="<a href="https://secure.domain.com/files/'">https://secure.domain.com/files/'</a>, 'src="/system/files/')");
 
$ret[] = update_sql("UPDATE comments SET comment = REPLACE(comment, 'src="/files/', 'src="/system/files/')");
 
$ret[] = update_sql("UPDATE comments SET comment = REPLACE(comment, 'src="files/', 'src="/system/files/')");
 
$ret[] = update_sql("UPDATE comments SET comment = REPLACE(comment, 'secure.domain.com/files/', 'secure.domain.com/system/files/')");

 

// Fix CiviCRM
 
$ret[] = update_sql("UPDATE node_revisions SET body = REPLACE(body, 'system/files/civicrm/', 'files/civicrm/')");
 
$ret[] = update_sql("UPDATE node_revisions SET teaser = REPLACE(teaser, 'system/files/civicrm/', 'files/civicrm/')");
 
$ret[] = update_sql("UPDATE comments SET comment = REPLACE(comment, 'system/files/civicrm/', 'files/civicrm/')");

  return

$ret;
}
?>

Reactie toevoegen