MF PHP Backup Suite - Suite completa per il backup LAMP

MF PHP Backup Suite è una classe scritta e studiata per abbracciare tutto quello che riguarda il backup di ambienti LAMP e non solo. Di facile utilizzo, plug&play, 1 solo file da includere nei tuoi progetti, opzioni avanzate di filtraggio cartelle / file, backup mySQL, invio del backup per email e FTP. Tutto quello che ti serve per i tuoi backup.

Codice Sorgente inserito in Tool e Classi PHPUtility per il Backup

A cosa serve MF PHP Backup Suite

MF PHP Backup Suite è una semplice classe scritta in PHP con un ricco set di metodi che mettono in mano allo sviluppatore un solido codebase per effettuare backup in ambienti PHP.

Questo permette la totale elasticità nella scrittura di codice per effettuare backup di interi siti web, oppure backup mirati solo agli script, o ancora backup dei soli file multimediali. In generale, con 2 righe di codice è possibile generare un backup, e con un'altra riga di codice è possibile inviare lo stesso backup ad un server FTP oppure ad un indirizzo email.

Una occhiata generale a MF PHP Backup Suite

Immagine del progetto MF PHP Backup Suite - Suite completa per il backup LAMP di Maurizio Fonte

Partiamo con un concetto di base: il backup, nel mondo web, è uno di quei fattori critici e delicati a cui bisogna sempre dare la massima priorità. I server web non sono immortali, gli hacker sono sempre dietro l'angolo, e molto probabilmente i file relativi alla tua applicazione web / sito / qualsivoglia web-based utility sono solo e soltanto custoditi in 1 posto solo, ovvero il tuo server web. Questo va bene, ma bisogna fare molta attenzione.

Vediamo quindi MF PHP Backup Suite ( da ora in avanti citata con MFPBS ) come un "coltellino svizzero" del mondo del backup, e impariamo a vedere il "Backup", come sottolineato prima, come parte integrante di qualsiasi progetto.

MFPBS permette la creazione "al volo" di backup compressi in formato .zip sulla base di regole di filtraggio di file e cartelle impostabili sia hardcoded durante l'istanza della classe backup, sia utilizzando i preset che la classe stessa mette a disposizione per facilitare l'impostazione del backup.

Ecco la lista generale delle potenzialità della classe MFPBS:

  • Plug & Play: includi 1 file, scrivi 2 righe di codice, e il backup è pronto
  • Error handling avanzato: se il tuo ambiente non soddisfa i requisiti o se hai sbagliato ad impostare i parametri, la classe te lo segnala
  • Creazione di backup tramite preset ( semplice e veloce per lo sviluppatore ) o tramite impostazione diretta dei filtri ( più complessa ma super flessibile
  • Dump di database mySQL funzionante senza che il sistema metta a disposizione exec() o mysqldump via bash, ovvero il codice sorgente per il dump è stato scritto tutto in puro e semplice PHP. Basta il nome del server mySQL, una password e un nome utente.
  • Invio del backup tramite email con crittazione dell'allegato, molto sicuro
  • Invio del backup ad un server remoto FTP
  • Estremamente facile da integrare in uno script di cron job

La classe MFPBS mette a disposizione molti preset per impostare il tipo di filtraggio di file e cartelle, tra cui:

  • preset per il backup di siti web, quindi comprendenti html, css, javascript, script php, immagini, database mySQL, etc.
  • preset per effettuare backup dei soli script di un ambiente, quindi file htaccess, script php, file html
  • preset per effettuare il backup dei soli file multimediali, quindi audio, video, immagini
  • preset per il backup totale di tutto il contenuto di un ambiente
  • preset per creare solo un albero di cartelle / sottocartelle di un ambiente
  • preset per il solo dump di database mySQL
  • ... molti altri preset, in continuo aggiornamento

Utilizzando i preset si risparmia tempo in quanto non si deve leggere la documentazione per comprendere tutte le opzioni di filtraggio, e l'instanza della classe di backup è davvero di solo 1 riga. In ogni caso, ti consiglio di leggere la documentazione per conoscere appieno il significato di ogni opzione e riuscire a creare dei filtri per qualsiasi configurazione dell'ambiente immaginabile.

Oltre alla semplice creazione dei backup, la classe MFPBS permette anche l'invio del backup generato per email o via ftp. L'invio per email potrebbe suonare strano, ma nel caso in cui il tuo backup non dovesse essere troppo grande in termini di dimensione, avere un backup per email è davvero comodo. Inoltre, MFPBS permette la crittazione dell'archivio inviato via email, quindi hai anche la sicurezza assoluta che nessuno possa capire cosa ci sia all'interno dell'allegato inviato per email.

Esempio di implementazione

<?php
	
	/*
		EXAMPLE 1 - full commented class call
		will probably trigger an error if you do not change the parameters and copy-paste it directly
		go to EXAMPLE 2 for a "working" example
	*/
	
	$backup = new mfPhpBackupSuite ( 
		Array ( 
			/*
				backup_file => the destionation folder + filename of the backup file
				#THIS_DIR# will be replaced with the dirname ( __FILE__ ) of class.backup.php
				#DATE# will be replaced with the current date in Y-m-d-H-i-s format
				#EXTENSION# will be replaced with the correct extension based on the archive compression format
			*/
			'backup_file' => '#THIS_DIR#/__backup.#DATE#.#EXTENSION#', 
			/*
				archive_type => the compression format. For the moment only zip is supported ( default )
			*/
			'archive_type' => 'zip',
			/*
				compression_level => the compression "strength". 1 = the lowest, 9 = the higher ( default )
			*/
			'compression_level' => 9,
			/*
				folder_to_be_backupped => the folder to be backupped. Consider it as the "root" of the backup, from where all files and folders will be processed
				Defaults to #THIS_DIR# i.e. the dirname ( __FILE__ ) where class.backup.php is placed
			*/
			'folder_to_be_backupped' => '/whatever/root/directory/',
			/*
				use_presets => Whether the backup options will be taken from presets or not.
				Please note that this boolean is not necessary in terms of source code, but makes things easier when reading the backup class call
			*/
			'use_presets' => true,
			/*
				preset => the set of backup configurations to be loaded.
				VALID PRESETS ( they save a lot of time in configuring the backup )
						- full		=> Every file and folder that actually is into the folder to be backupped is added to the backup
						- scripts	=> Only SCRIPT files ( htm, html, php, js, css, htaccess ) files are added to the backup file. Folder structure is mantained ( even if a subdirectory has no matching extensions )
						- webserver => Every file extension involved into creating a "full website" is added to the backup file. Folder structure is mantained 
						- media		=> Every MEDIA file ( images, videos, audio ) are added to the backup file. Folder structure IS NOT mantained
						- images	=> Every IMAGE files are added to the backup file. Folder structure IS NOT mantained
						- misc		=> Every file that DOES NOT belong to MEDIA and WEBSERVER categories, that actually is greater than 200kb in size, is added to the backup. Folder structure IS NOT mantained
				Defaults to 'full'
			*/
			'preset' => 'full',
			/*
				print_errors => Whether the class has to output errors or not.
				Defaults to false
			*/
			'print_errors' => false,
			/*
				backup_sql_databases => Whether the class has to dump the sql databases.
				# PLEASE NOTE # that the mysql dump will be placed into a directory named "__MYSQL_AUTOGENERATED_BACKUPS" into the root of the compressed backup archive
				Defaults to false
			*/
			'backup_sql_databases' => true,
			/*
				list_of_databases_to_backup => the ARRAY of mysql databases to dump
				Defaults to null i.e. ALL the databases found
			*/
			'list_of_databases_to_backup' => Array ( 'database1', 'database2', 'database3', 'whatever' ),
			/*
				sql_server => the mysql server to connect to if you want to backup mysql databases
				sql_username => the username to be used for mysql connection
				sql_password => the password to be user for mysql connection
			*/
			'sql_server' => 'localhost',
			'sql_username' => 'whatever',
			'sql_password' => 'whatever',
			/*
				auto => Whether the class has to IMMEDIATELY trigger the backup process UPON class instance or not
				Defaults to true i.e. when the class is called, the backup is immediately created ( if no fatal errors occurred )
			*/
			'auto' => true
		) 
	);
	
	if ( count ( $backup -> backup_fatal_errors ) == 0 && is_file ( $backup -> backup_file ) && filesize ( $backup -> backup_file ) > 0 ) {
		
		echo 'The backup ' . $backup -> backup_file . ' was correctly created!';
		
		if ( count ( $backup -> backup_soft_errors ) > 0 ) {
			
			echo 'The backup succeeded, but the following ( soft ) errors occurred ( be sure to correct them! ) : ' . print_r ( $backup -> backup_soft_errors, true );
			
		}
		
	}
	else {
		echo 'The backup failed due to the following reasons: ' . print_r ( $backup -> backup_fatal_errors, true );
	}
	
	/*
		EXAMPLE 2: trigger a WEBSERVER backup of the current $_SERVER['SERVER_NAME'], send it via email and to an ftp remote server
	*/
	$backup_two = new mfPhpBackupSuite ( Array ( 
													'backup_file' => '#THIS_DIR#/__backup.#DATE#.#EXTENSION#', 
													'folder_to_be_backupped' => rtrim ( $_SERVER['SERVER_NAME'], '/' ) . '/',
													'use_presets' => true,
													'preset' => 'webserver'
												) );
	
	// if no fatal errors, the backup file exists, and it contains something...
	if ( count ( $backup_two -> backup_fatal_errors ) == 0 && is_file ( $backup_two -> backup_file ) && filesize ( $backup_two -> backup_file ) > 0 ) {
		
		// let's try to send the backup via EMAIL with a given password
		if ( $backup_two -> sendTheBackupViaEmail ( 'send_to_this_address@example.tld', 'from_this_email_address@server.tld', true, 'password-for-the-backup-attachment' ) ) {
			
			echo 'The email with the backup attachment has been correctly sent!';
			
		}
		else echo 'An error occurred while trying to send the backup to the given email address...';
		
		// let's try to send the backup to a remote ftp server
		if ( $backup_two -> sendTheBackupViaFTP ( 'send_to_this_server_ip_or_domain', 'connect_with_this_username', 'connect_with_this_password', '/send/the/backup/to/this/remote/directory/backup.today.zip', 21 ) ) { // 21 is the FTP remote server port
			
			echo 'The backup attachment has been correctly sent to the remote FTP server!';
			
		}
		else echo 'An error occurred while trying to send the backup to the given FTP remote server...';
		
	}

?>

Elenco cronologico modifiche

- v1.8 10/02/2013 -
  - Release to the public
  - Code enhancements

- v1.7 18/01/2013 -
  - Added the FTP + crypted email send
  - Various bugfixes and code enhancements

- v1.6 -
  - Phpdocumentor-styled comments
comments powered by Disqus

Info sul progetto

  • Versione: 1.7.1
  • Ultimo aggiornamento: 12/02/2013
  • Dimensione: 0.26M
  • Requisiti PHP > 5.0 Zip Extension ( ZipArchive ) Mcrypt Extension ( mcrypt_encrypt ) Mysqli Extension ( mysqli_connect )

Download & Utilities

Condividi

Help & Feedback