WP SiteMover - Backup, Migration & Site Cloning
High-performance WordPress backup, zero-downtime migration, and site cloning plugin. Supports large sites (20GB+) and large files (1GB+). Includes an independent standalone installer for clean hosting.
by Massimiliano Masserelli · github.com/maxnegro/wp-site-mover · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/maxnegro/wp-site-mover/archive/refs/heads/main.zipReadme
WP SiteMover - WordPress Backup, Migration & Cloning Plugin
WP SiteMover è un plugin professionale per WordPress ideato per il backup completo, la migrazione a zero downtime e il clonaggio/ripristino di siti WordPress di qualsiasi dimensione (compresi siti complessi con file pesanti >1GB e dimensioni complessive >20GB).
1. Analisi Tecnica e Architettura del Sistema
1.1 Il Problema dei Backup e Migrazioni su Hosting Condivisi
La maggior parte dei plugin di migrazione fallisce su siti di grandi dimensioni a causa di:
- PHP Execution Timeout (
max_execution_time): I processi lunghi vengono interrotti dal server HTTP o dal processore FastCGI. - PHP Memory Limit (
memory_limit): L'allocazione dell'intero database o dell'elenco dei file in memoria genera un crashFatal Error: Allowed memory size exhausted. - Corruzione dei Dati Serializzati: La semplice sostituzione stringa di URL nel database corrompe i dati serializzati in WordPress (
s:length:"string"), rendendo il sito inaccessibile (es. widget persi, impostazioni temi corrotte). - Dipendenza da WordPress sul Target: Molti plugin richiedono che WordPress sia già installato ed operativo sul server di destinazione.
1.2 Soluzione Architetturale di SiteMover
SiteMover risolve questi limiti attraverso tre pilastri architetturali:
+-------------------------------------------------------------------+
| SITE MOVER ENGINE |
+---------------------------------+---------------------------------+
| Plugin Engine | Standalone Installer |
| (WordPress Admin Context) | (No WP Required on Target) |
+---------------------------------+---------------------------------+
| - Batch DB Exporter (Stream) | - Standalone PHP Wizard App |
| - Chunked Archive Builder | - Step-by-Step Ajax Extractor |
| - State Machine AJAX Progress | - Deep Serialized Search/Replace|
| - Manifest Generator + Token | - Auto wp-config.php Rewriter |
+---------------------------------+---------------------------------+
2. Componenti del Sistema
2.1 Plugin WordPress (wp-site-mover.php e moduli includes/)
SiteMover_Admin: Interfaccia di amministrazione moderna ed intuitiva per configurare, avviare e gestire i pacchetti.SiteMover_DB_Exporter: Esportatore MySQL ottimizzato che legge le tabelle a blocchi (batching) e scrive direttamente in streaming nel file.sqlsenza saturare la RAM.SiteMover_Archive_Builder: Generatore di archivi ZIP basato su iteratori a bassa memoria (DirectoryIterator+ZipArchive) con supporto al frazionamento/chunking e all'esclusione di directory di cache/log/temp.SiteMover_Package_Manager: Gestisce lo storage dei pacchetti (wp-content/uploads/site-mover-packages/), la sicurezza con file.htaccess/index.phpe la generazione delmanifest.json.
2.2 Installer Indipendente (site-installer.php)
Lo script site-installer.php è un'applicazione PHP standalone (autonoma) con interfaccia web AJAX a 5 fasi:
- Requisiti di Sistema: Verifica versione PHP (7.4+ / 8.x), estensioni necessarie (
mysqli,zip,zlib,json), permessi di scrittura e spazio disco. - Database Config: Inserimento credenziali MySQL del nuovo hosting, verifica connessione e creazione database/tabelle.
- Estrazione Pacchetto: Decompressione incrementale a blocchi (batch unzipping) dell'archivio
.zipdirettamente nella root del server. - Sostituzione URL e Percorsi (Search & Replace):
- Sostituzione profonda di Old URL -> New URL e Old Path -> New Path.
- Algoritmo di ricorsione sui dati serializzati (PHP
unserialize/ regex fix /serializericorsivo) per garantire la validità delle lunghezze delle stringhes:N:"...". - Aggiornamento / rigenerazione di
wp-config.php(credenziali DB, prefisso tabelle, chiavi di protezione salate).
- Completamento & Pulizia: Rimozione automatica o manuale di
site-installer.php,archive.zipe file temporanei di installazione per prevenire falle di sicurezza.
3. Gestione di Siti di Grandi Dimensioni (1GB+ File, 20GB+ Totali)
Per garantire stabilità su qualsiasi server senza crash per timeout o memory limit:
| Sfida Tecnica | Soluzione Adottata in SiteMover |
|---|---|
| Timeout durante il Dump DB | Lettura paginata delle tabelle (SELECT * FROM table LIMIT step OFFSET offset) e scrittura immediata con buffer flush. |
| Timeout durante la Zippatura | Archiviazione a micro-batch guidata da AJAX (step_archive con file index offset). |
| Limiti di memoria PHP | Utilizzo di generatori/iteratori PHP in lettura streaming ed eliminazione delle strutture dati monolitiche in RAM. |
| Estrazione di file > 1GB | Estrazione guidata da blocchi di N file per richiesta AJAX nell'installer. |
4. Algoritmo di Search & Replace per Dati Serializzati
Nel database di WordPress molte impostazioni (in wp_options, wp_postmeta, wp_usermeta) sono memorizzate in formato PHP serializzato:
a:2:{s:4:"link";s:22:"http://vecchiosito.com";s:4:"text";s:4:"Home";}
Se il nuovo dominio ha una lunghezza diversa (es. https://nuovosito.it -> 20 caratteri vs 22), una normale query SQL REPLACE() romperebbe la serializzazione rendendo il valore illeggibile per PHP.
SiteMover implementa un engine di Recursive Serialized Engine:
- Analizza ogni record campo per campo.
- Se il dato è una stringa serializzata, esegue il de-serializzatore sicuro.
- Effettua il rimpiazzo ricorsivo su array, oggetti e proprietà.
- Riserializza il dato ricalcolando accuratamente le lunghezze dei byte delle stringhe UTF-8.
- In caso di stringhe malformate, applica il fix tramite espressioni regolari sulla lunghezza
s:\d+:"...".
6. Internazionalizzazione (i18n)
Il plugin è completamente predisposto per le traduzioni secondo le best practice WordPress:
- Text domain:
wp-site-mover - File
.pottemplate inlanguages/wp-site-mover.pot - Traduzioni italiane (
it_IT) e inglesi (en_US) incluse inlanguages/ - Supporto per le stringhe JavaScript via
wp.i18ne JSON generati conwp i18n make-json
Per contribuire con nuove traduzioni, utilizzare Poedit o Loco Translate sui file .po nella cartella languages/.
5. Sicurezza e Protezione
- Token di Autenticazione Pacchetto: Ogni archivio e il rispettivo installer contengono un hash crittografico unico (
archive_key). L'installer richiede la chiave prima di eseguire la sovrascrittura o l'importazione. - Protezione Directory dei Backup: I pacchetti salvati sul server sorgente sono protetti tramite
.htaccess(Deny from all) e fileindex.phpvuoti per prevenire il download non autorizzato via URL diretto. - WP Nonce & Capability Checks: Tutti gli endpoint AJAX del plugin verificano le autorizzazioni dell'utente (
manage_options) e i token anti-CSRF (check_ajax_referral). - Auto-rimozione Installer: Al termine della migrazione,
site-installer.phppuò essere automaticamente rimosso per evitare esposizioni post-installazione.