Migrar/Copiar archivos de un servidor a otro

Continuando con el tema de migraciones (la semana pasada mostré en un artículo cómo importar una base de datos de gran tamaño), esta vez quiero mostrarles un método simple para migrar contenido de un servidor a otro.

copy_files

Hago esto porque he visto que para migrar un sitio algunos “programadores” descargan todo el sitio en su computadora y luego lo suben al servidor destino, ya sea por FTP o a través del Cpanel.

Como en Bolivia el internet es un asco (y encima caro) a diferencia de nuestros países vecinos, pues no hace falta decir que el proceso mencionado es muy ineficiente.

Es por ello que un simple script en PHP va a simplificarnos este proceso y hará en segundos (o minutos dependiendo del tamaño del sitio) algo que nos tomaría mucho más tiempo en hacerlo de la forma anteriormente descrita.

¿Qué necesitamos?

Lo único que vamos a necesitar es:

–  La URL donde podamos descargar el archivo comprimido de lo que queremos transferir o copiar.

Script PHP que realizará el proceso de copiado a través de la función copy

Instrucciones

1) Lo primero es comprimir todo el contenido del sitio desde el cpanel.

2) Una vez tengamos el archivo zip del contenido a migrar, verificamos si este archivo es accesible desde la URL respectiva del servidor origen.

Por ejemplo, ingresando a:

www.tu-sitio-web-origen.com/contenido-comprimido.zip

debería aparecerte la opción de descargar el archivo. Si es así, esto quiere decir que la ruta es accesible de modo que podemos proceder con el siguiente paso.

Recuerda, no descargues el archivo puesto que eso es lo que queremos evitar. La idea es que el script haga el copiado del archivo directamente desde el servidor destino, sin necesidad de pasar por tu computadora en el proceso.

3) Lo siguiente es crear nuestro script PHP para realizar el proceso de copiado:

 

<?php
$remote_file_url = 'http://tu-sitio-web-origen.com/contenido-comprimido.zip';
$local_file = 'archivo-destino.zip';
$copy = copy($remote_file_url, $local_file);

if ($copy) {
    echo "Archivo copiado exitosamente!";
} else {
    echo "Operacion fallida: El archivo no se copio...";
}
?>

 

4) Una vez tengamos nuestro archivo PHP creado (por ejemplo: mi-script.php), lo subimos al servidor destino (por cpanel o FTP) y lo ejecutamos ingresando a la URL correspondiente.

Por ejemplo:

www.tu-sitio-web-destino.com/mi-script.php

Y eso es todo. Ahora sólo nos tocará esperar. Este tiempo dependerá mucho del tamaño del archivo comprimido a copiar y de la velocidad de tu servidor.

No te preocupes si tu velocidad de internet es lenta ya que el script, al estar en el servidor, utilizará la velocidad del hosting y no la tuya. Es decir que incluso si tienes una velocidad de 128 Kbps no debería sorprenderte el hecho de que el script copie varios Gigabytes en tan solo un par de segundos o minutos.

Una vez el script haya terminado su tarea y el mensaje que te aparezca sea de éxito, lo único que quedará por hacer es revisar en tu servidor destino la ubicación donde tienes el script para ver ahí mismo a tu nuevo archivo zip perfectamente copiado. A partir de ese momento, lo que resta quedará está en tus manos.

Espero que esto te haya sido útil. No te olvides de dejar tu comentario.

17 thoughts on “Migrar/Copiar archivos de un servidor a otro

  • Cordial saludo. Y como se hace para que reciba una imagen desde una aplicación móvil en Android, le baje el peso, y luego la redireccione a my servidor, ya que donde tengo el proyecto no me deja subir imágenes con peso superior a 2m, o si subo más de 10 imágenes al mismo tiempo, se cierra la conexión.

    • Hola Mauricio,

      Bueno se me ocurre que podrías hacer lo siguiente:

      1) Comprimir todas las imágenes de tu aplicación (digamos imagenes.zip) en tu computadora y luego subir el archivo zip a algún medio que te permita descargarla directamente, como por ejemplo “OneDrive” (aunque sinceramente no lo he usado). La idea es que tengas una URL que permita descargar tu archivo zip de forma directa (sin hacer clicks de por medio, ni captchas).
      2) Luego creas un scrip php con el codigo del artículo y reemplazas:
      http://tu-sitio-web-origen.com/contenido-comprimido.zip
      con la URL que descarga el zip de tus imagenes.
      3) Subes tu script php al servidor de tu proyecto, el cual estoy seguro que no pesará más de 1 KB, y lo ejecutas.

      Y listo! Tendrás un zip en tu servidor que contendrá todas tus imágenes. Luego sólo quedará descomprimir el zip en tu servidor,
      Espero que la info te sirva.

      Un saludo

    • Hola Sergio,

      Pienso que siempre es mejor copiar un sólo archivo zip en lugar de varios archivos de una carpeta, ya que cuando el copiado se complete es mucho más fácil comprobar la integridad de un sólo archivo que de varios.

      En el caso de que no puedas comprimir tus archivos de tu directorio manualmente entonces una alternativa sería crear otro script php, el cual se ejecutaria primero, para crear automáticamente un archivo zip o 7-zip de TODO el contenido de tu directorio. Recuerdo haber usado un algoritmo recursivo en stackoverflow que hacía eso y que me funcionó perfecto, así que tendrías que buscarlo por ahí o sino simplemente implementarlo por tu cuenta.

      Un saludo.

    • También puede ser un video, una imagen o cualquier archivo siempre y cuando sea un archivo público (es decir que se pueda acceder sin restricciones).

      Saludos!

  • Que tal amigo, tu script me viene de maravilla, pero tengo un problemilla y es que luego de subir 600 megas aproximadamente, me sale este error:

    “Service Unavailable

    The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

    Additionally, a 503 Service Unavailable error was encountered while trying to use an ErrorDocument to handle the request.”

    y no logro copiar mas de esos 600 megas, necesito migrar un zip de 30GB pero no se que hacer, podrías ayudarme? gracias.

    • Hola Flavio,

      Lastimosamente ese es un problema netamente del servidor. Algo similar me ocurre cuando quiero importar bases de datos muy pesadas. Lo aconsejable sería que te contactes con el soporte de tu hosting a través de un ticket para ver si ellos pueden ayudarte, ya que poco o nada se puede hacer en este caso por nuestra cuenta.

      Por ej: en mi servicio de hosting si tienes este tipo de problemas, creas un ticket y luego ellos suben el archivo por tí ya sea a algún directorio del hosting o a la base de datos. Claro que para ello necesitas subir tu zip a algun otro lado y luego enviar el link a soporte para que ellos hagan su trabajo.

      Espero que consigas solucionar tu problema y logres migrar tu sitio.

      Un saludo!

  • Hola,
    estoy viendo su post, en mi caso necesito copiar un archivo php de un hosting y pasarlo a otro diferente. Lo tengo ubicado dentro de una carpeta, no en la raiz y también necesitaria que me lo copiase en otra carpeta. Al ver su post se me ha ocurrido la idea de hacerlo así, pero veo que no me funciona. La idea seria que el script me copiase el archivo php y crear un cron programado a un cierto tiempo para que fuera actualizando la información automaticamente de ese archivo sin la necesitadad del pc, ¿como lo podría hacer? ¿valdria su script o solamente es para archivos comprimidos? a mi por el momento no se me ocurre como hacerlo, ¿me puede ayudar?
    gracias

    • Hola Hilario,

      Mi sugerencia es siempre, asi sea para 1 solo archivo, comprimir en un zip todo el contenido que quieres migrar y luego aplicar el script. No olvides antes que debes asegurarte de que la ruta del zip que escribes en el script php DEBE SER ACCESIBLE, de lo contrario el script no funcionará.

      Si sigues los pasos al pie de la letra, no deberías tener problemas. Aunque si por alguna razón no te llega a funcionar, pues en este caso podrías simplemente descargarte el archivo php del hosting y luego subirlo al otro hosting donde quieres tenerlo, ya que esta solución está pensada especialmente para migrar archivos muy pesados.

      Un saludo!

    • Hola Nelvin,

      En ese caso, al estar los archivos en tu PC que hace de servidor local, pues se usaría la velocidad de tu conexión de internet, así que incluso usando este script lastimosamente no habría mejora alguna.

      Saludos 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *