ÿØÿà JFIF ` ` ÿþxØ
| Server IP : 109.234.164.53 / Your IP : 216.73.216.110 Web Server : Apache System : Linux cervelle.o2switch.net 4.18.0-553.32.1.lve.el8.x86_64 #1 SMP Thu Dec 19 13:14:03 UTC 2024 x86_64 User : computer3 ( 1098) PHP Version : 7.1.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/computer3/live-snaps.fr/cp-admin/ |
Upload File : |
<?php
require_once('includes/header.php');
require_once('includes/menu.php');
?>
<div class="container">
<div class="form-horizontal">
<div class="page-header">
<div class="container-fluid">
<h1>Sauvegarde base de données + dossiers images</h1>
</div>
</div>
<div class="container-fluid">
<div class="alert alert-info"><i class="fa fa-info-circle"></i>
Cliquez sur les liens ci-dessous afin de récupérer vos sauvegardes.
<button type="button" class="close" data-dismiss="alert">×</button>
</div>
</div>
<div class="pull-right">
<a href="index.php" class="btn btn-primary"><i class="icon-arrow-left"></i> Terminer / Fin</a>
</div>
<br /> <br /> <br /> <br />
<div style="margin-left: 100px;">
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
/**
* Sauvegarde upload
*/
function zipper_repertoire_recursif($nom_archive, $adr_dossier, $dossier_destination = '', $zip=null, $dossier_base = '') {
if($zip===null) {
// Si l'archive n'existe toujours pas (1er passage dans la fonction, on la crée)
$zip = new ZipArchive();
if($zip->open($nom_archive, ZipArchive::CREATE) !== TRUE) {
// La création de l'archive a échouée
return false;
}
}
if(substr($adr_dossier, -1)!='/') {
// Si l'adresse du dossier ne se termine pas par '/', on le rajoute
$adr_dossier .= '/';
}
if($dossier_base=="") {
// Si $dossier_base est vide ça veut dire que l'on rentre
// dans la fonction pour la première fois. Donc on retient
// le tout premier dossier (le dossier racine) dans $dossier_base
$dossier_base=$adr_dossier;
}
if(file_exists($adr_dossier)) {
if(@$dossier = opendir($adr_dossier)) {
while(false !== ($fichier = readdir($dossier))) {
if($fichier != '.' && $fichier != '..') {
if(is_dir($adr_dossier.$fichier)) {
$zip->addEmptyDir($adr_dossier.$fichier);
zipper_repertoire_recursif($nom_archive, $adr_dossier.$fichier, $dossier_destination, $zip, $dossier_base);
}
else {
$zip->addFile($adr_dossier.$fichier);
}
}
}
}
}
if($dossier_base==$adr_dossier) {
// On ferme la zip
$zip->close();
if($dossier_destination!='') {
if(substr($dossier_destination, -1)!='/') {
// Si l'adresse du dossier ne se termine pas par '/', on le rajoute
$dossier_destination .= '/';
}
// On déplace l'archive dans le dossier voulu
if(rename($nom_archive, $dossier_destination.$nom_archive)) {
return true;
}
else {
return false;
}
}
else {
return true;
}
}
}
/**
* Sauvegarde MySQL
*/
class BackupMySQL extends mysqli {
/**
* Dossier des fichiers de sauvegardes
* @var string
*/
protected $dossier;
/**
* Nom du fichier
* @var string
*/
public $nom_fichier;
/**
* Ressource du fichier GZip
* @var ressource
*/
protected $gz_fichier;
/**
* Constructeur
* @param array $options
*/
public function __construct($options = array()) {
$default = array(
'port' => ini_get('mysqli.default_port'),
'socket' => ini_get('mysqli.default_socket'),
// autres options
'dossier' => 'dump/',
'nbr_fichiers' => 5,
'nom_fichier' => 'backup'
);
$options = array_merge($default, $options);
extract($options);
// Connexion de la connexion DB
@parent::__construct($host, $username, $passwd, $dbname, $port, $socket);
if($this->connect_error) {
$this->message('Erreur de connexion (' . $this->connect_errno . ') '. $this->connect_error);
return;
}
// Controle du dossier
$this->dossier = $dossier;
if(!is_dir($this->dossier)) {
$this->message('Erreur de dossier "' . htmlspecialchars($this->dossier) . '"');
return;
}
// Controle du fichier
$this->nom_fichier = $nom_fichier . date('Ymd-His') . '.sql.gz';
$this->gz_fichier = @gzopen($this->dossier . $this->nom_fichier, 'w');
if(!$this->gz_fichier) {
$this->message('Erreur de fichier "' . htmlspecialchars($this->nom_fichier) . '"');
return;
}
// Demarrage du traitement
$this->sauvegarder();
$this->purger_fichiers($nbr_fichiers);
}
/**
* Message d'information ( commenter le "echo" pour rendre le script invisible )
* @param string $message HTML
*/
protected function message($message = ' ') {
echo '<p style="padding:0; margin:1px 10px; font-family:sans-serif;">'. $message .'</p>';
}
/**
* Protection des quot SQL
* @param string $string
* @return string
*/
protected function insert_clean($string) {
// Ne pas changer l'ordre du tableau !!!
$s1 = array( "\\" , "'" , "\r", "\n", );
$s2 = array( "\\\\" , "''" , '\r', '\n', );
return str_replace($s1, $s2, $string);
}
/**
* Sauvegarder les tables
*/
protected function sauvegarder() {
$this->message('Sauvegarde en cours ...');
$this->message('<br />');
$sql = '--' ."\n";
$sql .= '-- '. $this->nom_fichier ."\n";
gzwrite($this->gz_fichier, $sql);
// Liste les tables
//$this->message('Liste des données');
//$this->message('<br />');
$result_tables = $this->query('SHOW TABLE STATUS');
if($result_tables && $result_tables->num_rows) {
while($obj_table = $result_tables->fetch_object()) {
//$this->message('- ' . htmlspecialchars($obj_table->{'Name'}));
// DROP ...
$sql = "\n\n";
$sql .= 'DROP TABLE IF EXISTS `'. $obj_table->{'Name'} .'`' .";\n";
// CREATE ...
$result_create = $this->query('SHOW CREATE TABLE `'. $obj_table->{'Name'} .'`');
if($result_create && $result_create->num_rows) {
$obj_create = $result_create->fetch_object();
$sql .= $obj_create->{'Create Table'} .";\n";
$result_create->free_result();
}
// INSERT ...
$result_insert = $this->query('SELECT * FROM `'. $obj_table->{'Name'} .'`');
if($result_insert && $result_insert->num_rows) {
$sql .= "\n";
while($obj_insert = $result_insert->fetch_object()) {
$virgule = false;
$sql .= 'INSERT INTO `'. $obj_table->{'Name'} .'` VALUES (';
foreach($obj_insert as $val) {
$sql .= ($virgule ? ',' : '');
if(is_null($val)) {
$sql .= 'NULL';
} else {
$sql .= '\''. $this->insert_clean($val) . '\'';
}
$virgule = true;
} // for
$sql .= ')' .";\n";
} // while
$result_insert->free_result();
}
gzwrite($this->gz_fichier, $sql);
} // while
$result_tables->free_result();
}
gzclose($this->gz_fichier);
$this->message('<br /><br />');
$this->message('<b>Sauvegarde terminée ! </b>Cliquez sur les liens pour les télécharger.');
$this->message('<br />');
$this->message('<strong style="color:green;"><a href="dump/' . substr(htmlspecialchars($this->nom_fichier), 0, -6) . 'gz">Téléchargement des fichiers uploadés</a></strong>');
$this->message('<strong style="color:green;"><a href="dump/' . htmlspecialchars($this->nom_fichier) . '">Téléchargement de la base de données</a></strong>');
}
/**
* Purger les anciens fichiers
* @param int $nbr_fichiers_max Nombre maximum de sauvegardes
*/
protected function purger_fichiers($nbr_fichiers_max) {
$this->message();
$this->message('Nettoyage des anciennes sauvegardes ...');
$fichiers = array();
// On recupere le nom des fichiers gz
if($dossier = dir($this->dossier)) {
while(false !== ($fichier = $dossier->read())) {
if($fichier != '.' && $fichier != '..') {
if(is_dir($this->dossier . $fichier)) {
// Ceci est un dossier ( et non un fichier )
continue;
} else {
// On ne prend que les fichiers se terminant par ".gz"
if(preg_match('/\.gz$/i', $fichier)) {
$fichiers[] = $fichier;
}
}
}
} // while
$dossier->close();
}
// On supprime les anciens fichiers
$nbr_fichiers_total = count($fichiers);
if($nbr_fichiers_total >= $nbr_fichiers_max) {
// Inverser l'ordre des fichiers gz pour ne pas supprimer les derniers fichiers
rsort($fichiers);
// Suppression...
for($i = $nbr_fichiers_max; $i < $nbr_fichiers_total; $i++) {
$this->message('<strong style="color:red;">' . htmlspecialchars($fichiers[$i]) . '</strong>');
unlink($this->dossier . $fichiers[$i]);
}
}
$this->message('Nettoyage terminée !');
}
}
$options = array(
'host' => $sql_hostname,
'username' => $sql_user,
'passwd' => $sql_password,
'dbname' => $sql_name
);
$sqlZip = new BackupMySQL($options);
zipper_repertoire_recursif(substr(htmlspecialchars($sqlZip->nom_fichier), 0, -6) . 'gz', '../uploadfiles', 'dump/');
?>
</div>
</div>
</div>
<?php
include_once('includes/footer.php');
?>