Al migrar sitios Drupal o Wordpress, un proceso común es exportar e importar la base de datos. Cuando el dominio cambia, usualmente hay muchos vínculos al dominio anterior que deben ser actualizados manualmente para apuntar al nuevo dominio y algunas veces es difícil estar seguro de si el dominio ha sido reemplazado en todos los lugares necesarios. Un reemplazo simple desde un editor de texto puede dañar los arreglos serializados de PHP, generado problemas impredecibles que suelen iniciar con una pantalla en blanco de la muerte. Este script automáticamente encuentra todas las referencias a los antiguos dominios y las actualiza para apuntar al nuevo dominio preservando cuentas de correo y ajustando el conteo de caracteres en los arreglos serializados de PHP. Algunas versiones codificadas de los antiguos dominios pueden continuar existiendo tras el proceso pero este script muy seguramente va a facilitar mucho el proceso.

Este script:

  • Ajusta las longitudes de cadenas registradas en los arreglos serializados de PHP que usalmente se utilizan para guardar variables de configuración de la aplicación.
  • No cambia cuentas de correo
  • Cambia URLs codificados en HTML
  • Carga todo el archivo en la memoria de su computador así que tenga en cuenta su capacidad RAM al utilizarlo.
  • Solo ha sido probado con bases exportadas en UTF8.
  • No funciona en algunos navegadores desactualizados.

Inténtelo:







El Código:

chdomain = function(sql, olds, newd) {
  var $ = jQuery;
  var reDomain = (/\d+:\\"(?:[^;]*[^\w\."@]|[^;]*%2F)?DOMAIN/g).source;
  var reSDomain = (/([^\w\.@]|%2F)DOMAIN/g).source;
  var rEsc = function(s) {return s.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); };

  for(var di in olds) {
    var d = $.trim(olds[di]);
    var dRegex = new RegExp(reDomain.replace('DOMAIN', rEsc(d)), 'g');
    var nmns = sql.match(dRegex);
    while(nmns && nmns.length) {
      for(var i in nmns) if(nmns[i].length){
        var parts = nmns[i].split(':\\"');
        parts[1] = parts[1].replace(d, newd);
        parts[0] = parseInt(parts[0]) + newd.length - d.length;
        var nnm = parts.join(':\\"');
        var cho = RegExp(rEsc(nmns[i]), 'g');
        console.log(cho.source, nnm);
        sql = sql.replace(cho, nnm);
      }
      nmns = sql.match(dRegex);
    }
    var cho2 = new RegExp(reSDomain.replace('DOMAIN',rEsc(d)), 'g');
    sql = sql.replace(cho2, '$1'+newd)	;
  }
  return sql;
};