La tarea que menos me gusta hacer, es migrar bases de datos, menos cuando incluyen una buena base de datos de imagenes. En este caso, la nueva DB relaciona los usuarios con su imagen mediante el ID de éste. Si el usuario tenía ID 5, la imagen se llamaba 5.jpg y así. La vieja base de datos guardaba la imagen con su nombre aleatorio (aparentemente) y guardaba el nombre en el DB.
Traerme miles de imagenes del viejo server y renomarlas manualmente es imposible y ridículo. Así que la solución fué bajarme la base de datos, la instalé en mi equipo y escribí éste script en CakePHP:
class ImportarController extends AppController { var $name = 'Importar'; var $uses = array('User'); function imagenes() { $users = $this->User->findAll(); foreach ($users as $user) { copy('http://domain.com/images/'.$user['image'],'/tmp/images/'.$user['id'].'.jpg'); } exit('Imagenes importadas.'); } }
Lo que hace es obtener todos los usuarios de la vieja base de datos con CakePHP. Si no lo usas no importa, la idea es obtener los nombres de las imagenes y la información que necesites de la base de datos.
La función copy de PHP no solo copia archivos dentro del mismo servidor, sino que puede hacerlo de servidores remotos como en éste caso. El segundo parametro es el nombre y destino de la imagen, yo he dejado una carpeta dentro de los archivos temporales de Linux.
Si nos funciona bien el script, entonces esa carpeta estará llena de imagenes, que finalmente podrás usar donde quieras. Éste script tambien sirve para pasar muchisimas imagenes de un servidor a otro, sin tener que hacerlo tu actuando de intermediario. Es muy simple, pero muy útil :)