remove - ¿Copia de seguridad del sitio web en PHP?
strip_tags wordpress (5)
Estoy usando myRepono , además de lo que has mencionado, si realizas copias de seguridad rápidas y automáticas, y es muy estable y seguro.
¿Alguien sabe una solución limpia basada en PHP que puede respaldar sitios web remotos utilizando FTP?
Debe tener:
- Copias de respaldo FTP recurrentes
- Posible ejecutar a través de un trabajo cron
- Fácil de configurar (adición fácil de múltiples sitios)
- El almacenamiento local de los archivos de copia de seguridad es suficiente
Sería bueno:
- Los sitios respaldados se almacenan como archivos zip
- Una buena interfaz para administrar las cosas
- Proporciona una notificación cuando la copia de seguridad ha tenido éxito o ha fallado
- Realiza copias de seguridad incrementales
- Hace copias de seguridad de la base de datos MySQL
Necesito que esté basado en PHP porque se usará en paquetes de alojamiento compartido que no permiten el uso de las herramientas estándar de GNU / Linux.
He hecho algo como esto en un script PHP de cron job antes. No estoy seguro si es la mejor manera, pero ciertamente funciona.
$backup_file = ''/home/example/sql_backup/mo_''.date(''Y-m-d'').''.sql.gz'';
$command = ''/usr/bin/mysqldump -c -h''.DB_HOST.'' -u''.DB_USER.'' -p''.DB_PASS.'' --default-character-set=latin1 -N ''.DB_NAME.'' | gzip > ''.$backup_file;
exec($command);
A continuación, puede ejecutar un sftp en el servidor remoto.
Podría hacer las carpetas de archivos de manera similar con exec () y compresión de Linux.
Si bien su hosting compartido puede no proporcionar muchas herramientas, debe proporcionar al menos algunas, podría valer la pena preguntarle a su anfitrión qué ofrecen o recomendar para las copias de seguridad. ¿Desea realizar una copia de seguridad en un host bastante idéntico? (al menos en términos de software)
Para ejecutar rsync con éxito, solo debe ejecutarse en una máquina, la otra ni siquiera necesita saber que rysnc existe, tampoco importa cuál de las máquinas lo esté ejecutando (copia de seguridad o host primario).
¿Tiene acceso cli al servidor para instalar paquetes o módulos php? Si no lo hace, entonces todas las apuestas están desactivadas, ya que es probable que su instalación de php no incluya ninguno de los paquetes necesarios para comenzar a pensar en intentar esto desde php.
Recomendaría una solución que no sea php como rysnc o un script bash de algún tipo. Aunque podría envolver el proceso en un contenedor php para administrarlo.
De hecho, escribí un artículo con guiones incluidos sobre cómo lo hice usando PHP, Bash y algunas otras piezas de software de fuente abierta para enviar las notificaciones de correo electrónico preformateadas sobre las copias de seguridad.
http://codeuniversity.com/scripts/scr1
Mis requisitos eran bastante similares, aunque no hay FTP involucrados. Todo está hecho localmente. Dale una mirada. Tal vez lo encuentres útil.
Codifiqué esto para manejar las copias de seguridad de FTP, no estoy seguro de si se ajusta a sus necesidades específicas si:
class Backup
{
public $ftp = null;
public $files = array();
public function FTP($host, $user = null, $pass = null, $port = 21, $path = ''/'')
{
if ((extension_loaded(''ftp'') === true) && (extension_loaded(''zip'') === true))
{
$this->ftp = ftp_connect($host, $port, 5);
if (is_resource($this->ftp) === true)
{
if (ftp_login($this->ftp, $user, $pass) === true)
{
$zip = new ZipArchive();
if (is_object($zip) === true)
{
ftp_pasv($this->ftp, true);
if ($zip->open(sprintf(''./%s_%s.zip'', $host, date(''YmdHis'', time())), ZIPARCHIVE::CREATE) === true)
{
$this->FTP_Map($path);
while (($file = array_shift($this->files)) !== null)
{
if (preg_match(''~/$~'', $file) > 0)
{
$zip->addEmptyDir(preg_replace(''~^[///]+~'', '''', $file));
}
else
{
$stream = tempnam(sys_get_temp_dir(), __CLASS__);
if (is_file($stream) === true)
{
if (ftp_get($this->ftp, $stream, $file, FTP_BINARY, 0) === true)
{
$zip->addFromString(preg_replace(''~^[///]+~'', '''', $file), file_get_contents($stream));
}
unlink($stream);
}
}
}
}
$zip->close();
}
}
ftp_close($this->ftp);
}
}
return false;
}
public function FTP_Map($path = ''/'')
{
if (is_resource($this->ftp) === true)
{
$files = ftp_nlist($this->ftp, ltrim($path, ''/''));
if (is_array($files) === true)
{
foreach ($files as $file)
{
if (@ftp_chdir($this->ftp, $file) !== true)
{
$this->files[] = sprintf(''/%s/%s'', trim($path, ''///''), trim($file, ''///''));
}
else if (ftp_cdup($this->ftp) === true)
{
if (array_push($this->files, sprintf(''/%s/%s/'', trim($path, ''///''), trim($file, ''///''))) > 0)
{
$this->FTP_Map(sprintf(''/%s/%s/'', trim($path, ''///''), trim($file, ''///'')));
}
}
}
return true;
}
}
return false;
}
}
Uso:
$Backup = new Backup();
$Backup->FTP(''demo.wftpserver.com'', ''demo-user'', ''demo-user'', 21, ''/text/'');
Para las copias de seguridad de MySQL, ¿ SELECT INTO OUTFILE
hacerlo?