Sincronizzare gli uploads di WordPress fra due host in seguito ad un trasferimento

Dopo aver trasferito un sito WordPress tramite FTP, mi sono ritrovato mio malgrado a non avere nell’host di destinazione tutti i file caricati nel precedente. Questo può succedere ad esempio quando il server FTP di origine limita l’elenco dei file caricati ad un tot (nel mio caso, erano 10.000, della serie “640K ought to be enough for anybody“). Serviva un intervento, e serviva subito.

Una volta intercettata tramite regola di rewrite qualsiasi richiesta di file contenuti dentro la directory di upload di WordPress…

RewriteRule ^wp-content/uploads/(.*)$ recupera-immagine.php?file=$1 [L]

… ho creato un semplice script che copia il file mancante sul server di destinazione e lo stampa in output, previa emissione dei giusti header. Così la semplice navigazione degli utenti sul sito ricostruirà tutto l’archivio dei file.

<?php
if(!$file = file_get_contents('wp-content/uploads/'.$_GET['file']))
{
$file = file_get_contents('http://ORIGINE.VOSTRA/wp-content/uploads/'.$_GET['file']);
file_put_contents('wp-content/uploads/'.$_GET['file'], $file);
file_put_contents('immagini-recuperate.log', 'Recuperata ' . $_GET['file'] . "\n", FILE_APPEND);
}
$estensione = strtolower(array_pop(explode('.', $_GET['file'])));
switch($estensione)
{
case 'jpg':
case 'jpeg':
header('Content-type: image/jpg');
break;
case 'png':
header('Content-type: image/png');
break;
case 'css':
header('Content-type: text/css');
break;
}
echo $file;
?>

Per accorgermi di quando la sincronizzazione sarà completata ho creato un semplice log. Quando non verrà più aggiornato provvederò a rimuovere la regola di rewrite, perché come potete immaginare incide sulle prestazioni dell’I/O.


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

%d blogger hanno fatto clic su Mi Piace per questo: