1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
<?php
// controller/backup.php
function sauvegarder($from)
{
$title = 'extraction des données';
$chemin = "data/";
$nomFichier = "melaineDATA.zip";
// création ou remplacement d'une archive zip
// une erreur est jetée si l'extension zip n'est pas activée
try
{
$zip = new ZipArchive();
}
catch (Throwable $e)
{
echo($erreur);
die();
}
// création du fichier zip vide
// j'ai utilisé l'option ZipArchive::OVERWRITE,
// ZipArchive::FL_OVERWRITE n'apparaît qu'avec PHP 8
if ($zip->open($chemin . $nomFichier, ZipArchive::CREATE | ZipArchive::OVERWRITE)!==TRUE) {
exit("Impossible d'ouvrir le fichier <i>" . $chemin . $nomFichier . "</i>.\n");
}
// ajout des fichiers
// chemin complet = data/"pages"/"html ou images"/"tous les fichiers"
$zip->addGlob($chemin . '*/*/*', 0, array(''));
$zip->close();
// pour pouvoir manipuler le fichier depuis filezilla ou ssh
chmod($chemin . $nomFichier, 0666); // écriture 4 chiffres
require('view/backup.php');
}
function restaurer($from)
{
$title = 'Restauration des données';
$chemin = "data/";
$nomFichier = "melaineDATA.zip";
require('view/backup.php');
}
// inutile
function creerMelainePHP()
{
$nomFichier = "melainePHP.zip";
try
{
$Zip = new ZipArchive();
}
catch (Throwable $e) // absence de l'extension zip
{
echo($erreur);
die();
}
if ($Zip->open('data/' . $nomFichier, ZipArchive::CREATE | ZipArchive::OVERWRITE)!==TRUE)
{
exit("Impossible d'ouvrir le fichier <i>" . $nomFichier . "</i>.\n");
}
// fichiers à la racine
$Zip->addGlob('*.php', 0, array(''));
$Zip->addGlob('.htaccess', 0, array(''));
$Zip->addGlob('*.txt', 0, array(''));
// tous les dossiers sauf data et .git
$listeDossiers = array('model', 'view', 'controller', 'public', 'lib');
foreach($listeDossiers as $path)
{
// les deux lignes suivantes me dépassent un peu,
// mais ça marche et c'est comme ça qu'il faut faire
$directory = new RecursiveDirectoryIterator($path);
$iterator = new RecursiveIteratorIterator($directory);
foreach ($iterator as $info)
{
// chemins inutiles . et ..
if($info->getFilename() != "." && $info->getFilename() != "..")
{
//var_dump($info->getPathname());
$Zip->addGlob($info->getPathname(), 0, array(''));
}
}
}
$Zip->close();
chmod('data/' . $nomFichier, 0644); // écriture 4 chiffres (octal)
}
|