summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2022-03-28 03:45:38 +0200
committerpolo <ordipolo@gmx.fr>2022-03-28 03:45:38 +0200
commit4873117ec6aeb86ef169cbf8750123ca24041cdf (patch)
tree7f8ec95171e74d03d9cd9a6edc12108ecbd59785 /controller
parent92a4565f303f5b9f273a8d1eb74d52ac541e89bc (diff)
downloadmelaine-4873117ec6aeb86ef169cbf8750123ca24041cdf.zip
upload gros zip AJAX
Diffstat (limited to 'controller')
-rw-r--r--controller/backup.php145
-rw-r--r--controller/installation.php12
2 files changed, 108 insertions, 49 deletions
diff --git a/controller/backup.php b/controller/backup.php
index 31974d0..b1a2491 100644
--- a/controller/backup.php
+++ b/controller/backup.php
@@ -2,7 +2,7 @@
2// controller/backup.php 2// controller/backup.php
3 3
4// note: faire que cette fonction soit exécutée automatiquement de temps en temps 4// note: faire que cette fonction soit exécutée automatiquement de temps en temps
5function sauvegarder($from) 5function pageSauvegarde($from)
6{ 6{
7 $title = 'extraction des données'; 7 $title = 'extraction des données';
8 8
@@ -21,7 +21,7 @@ function sauvegarder($from)
21 require('view/backup.php'); 21 require('view/backup.php');
22} 22}
23 23
24function creerMelainePHP() 24function createZipMelainePHP()
25{ 25{
26 $cheminDestination = 'data/'; 26 $cheminDestination = 'data/';
27 $nomFichier = "melainePHP"; 27 $nomFichier = "melainePHP";
@@ -99,75 +99,124 @@ function createZip($destinationPath, $zipFileName, array $targetDirectories, arr
99} 99}
100 100
101 101
102function restaurer($from) 102function restoreData($path)
103{ 103{
104 $title = 'Restauration des données';
105 $message = '';
106 global $archiveFormat; 104 global $archiveFormat;
105 $message = '';
107 106
108 // recharger la même page en écrivant les données 107 // détecter le format (zip ou autre)
109 if(isset($_FILES['archive']) && $_FILES['archive']['error'] == 0) 108 if($archiveFormat == 'zip')
110 { 109 {
111 // détecter le format (zip ou autre) 110 // extraction
112 if($archiveFormat == 'zip') 111 try
113 { 112 {
114 // une copie du zip est conservée dans data/ au cas où 113 $Zip = new ZipArchive();
115 move_uploaded_file($_FILES['archive']['tmp_name'], 'data/' . $_FILES['archive']['name']); 114 }
116 chmod('data/' . $_FILES['archive']['name'], 0666); 115 catch (Throwable $e) // l'extension zip n'est pas activée
117 116 {
118 $nomFichier = 'data/' . $_FILES['archive']['name']; 117 echo($e);
119 118 die();
120 // extraction 119 }
121 try 120 if($Zip->open($path, ZipArchive::RDONLY) === TRUE)
122 { 121 {
123 $Zip = new ZipArchive(); 122 $j = 0;
124 } 123 for($i = 0; $i < $Zip->numFiles; $i++)
125 catch (Throwable $e) // l'extension zip n'est pas activée
126 {
127 echo($e);
128 die();
129 }
130 if($Zip->open($nomFichier, ZipArchive::RDONLY) === TRUE)
131 { 124 {
132 $j = 0; 125 $nomEntree = $Zip->getNameIndex($i);
133 for($i = 0; $i < $Zip->numFiles; $i++) 126 if($Zip->extractTo('.', $nomEntree) === TRUE)
134 { 127 {
135 $nomEntree = $Zip->getNameIndex($i); 128 $j++;
136 if($Zip->extractTo('.', $nomEntree) === TRUE)
137 {
138 $j++;
139 }
140 else
141 {
142 $message = '<p style="color: red;" >Erreur: extraction du zip impossible.</p>';
143 }
144 chmod($nomEntree, 0666);
145 } 129 }
146 130 else
147 if($j == $Zip->numFiles)
148 { 131 {
149 $message = '<p style="color: red;" >Restauration ussie !!</p>'; 132 $message = '<p style="color: red;" >Erreur: extraction du zip impossible.</p>';
150 } 133 }
151 $Zip->close(); 134 chmod($nomEntree, 0666);
152 } 135 }
153 else 136
137 if($j == $Zip->numFiles)
154 { 138 {
155 // mauvais fichier 139 $message = '<p style="color: red;" >Restauration réussie !!</p>';
156 $message = '<p style="color: red;" >Erreur: Impossible d\'ouvrir l\'archive Zip."</p>';
157 } 140 }
141 $Zip->close();
158 } 142 }
159 else 143 else
160 { 144 {
161 // pas de module zip 145 // mauvais fichier
162 $message = '<p style="color: red" >Erreur: Veuillez activer l\'extension zip dans le php.ini pour pouvoir gérer les sauvegardes.</p>'; 146 $message = '<p style="color: red;" >Erreur: Impossible d\'ouvrir l\'archive Zip."</p>';
163 } 147 }
164 } 148 }
149 else
150 {
151 // pas de module zip
152 $message = '<p style="color: red" >Erreur: Veuillez activer l\'extension zip dans le php.ini pour pouvoir gérer les sauvegardes.</p>';
153 }
154
155 return($message);
156}
157
158function pageRestauration($from)
159{
160 $title = 'Restauration des données';
161 $message = '';
162 global $maxWeight;
163
164 // recharger la même page en écrivant les données
165 if(isset($_SESSION['fileName']) && isset($_SESSION['fileSize']) && $_SESSION['fileSize'] > $maxWeight)
166 {
167 // une copie du zip est conservée dans data/ au cas où
168 $path = 'data/' . $_SESSION['fileName'];
169 rename('data/tmp/' . $_SESSION['fileName'], $path);
170 chmod($path, 0666);
171
172 // enregistrement
173 $message = restoreData($path);
174 }
175
176 // variables obtenues en AJAX
177 if(isset($_SESSION['fileName']))
178 {
179 unset($_SESSION['fileName']);
180 }
181 if(isset($_SESSION['fileSize']))
182 {
183 unset($_SESSION['fileSize']);
184 }
185
186 if(isset($_FILES['archive']) && $_FILES['archive']['error'] == 0)
187 {
188 // une copie du zip est conservée dans data/ au cas où
189 $path = 'data/' . $_FILES['archive']['name'];
190 move_uploaded_file($_FILES['archive']['tmp_name'], $path);
191 chmod($path, 0666);
192
193 // enregistrement
194 $message = restoreData($path);
195 }
165 elseif(isset($_FILES['archive']) && $_FILES['archive']['error'] != 0) 196 elseif(isset($_FILES['archive']) && $_FILES['archive']['error'] != 0)
166 { 197 {
167 $message = '<p style="color: red;" >Erreur: Le fichier n\'a pas pu être téléchargé correctement.<br/> 198 $message = '<p style="color: red;" >Erreur: Le fichier n\'a pas pu être téléchargé correctement.<br/>
168 Au fait, "upload_max_filesize" dans le php.ini vaut ' . ini_get('upload_max_filesize') . '.</p>'; 199 Au fait, "upload_max_filesize" dans le php.ini vaut ' . ini_get('upload_max_filesize') . '.</p>';
169 } 200 }
170 201
171 require('view/backup.php'); 202 require('view/backup.php');
172} 203}
173 204
205// upload AJAX d'un zip dans file_upload.js
206function uploadChunkAndMerge()
207{
208 // $_GET['chunk_name'] n'est pas utilisé pour l'instant
209
210 if(isset($_SESSION['fileName']))
211 {
212 $zipName = 'data/tmp/' . $_SESSION['fileName'];
213 $srcFile = fopen($_FILES['blob']['tmp_name'], 'r');
214 $destFile = fopen($zipName, 'a'); // 'a' crée ou écrit à la fin
215
216 // copie de données brutes
217 stream_copy_to_stream($srcFile, $destFile);
218
219 fclose($srcFile);
220 fclose($destFile);
221 }
222} \ No newline at end of file
diff --git a/controller/installation.php b/controller/installation.php
index 4966611..3b940c8 100644
--- a/controller/installation.php
+++ b/controller/installation.php
@@ -138,13 +138,23 @@ function installation()
138 { 138 {
139 createIndexPHP('data/discographie/images-mini/index.php', $droitsFichiers); 139 createIndexPHP('data/discographie/images-mini/index.php', $droitsFichiers);
140 } 140 }
141 // fichiers temporaires pour upload des grosses archives
142 if(!file_exists('data/tmp'))
143 {
144 mkdir('data/tmp');
145 chmod('data/tmp', $droitsDossiers);
146 }
147 if(!file_exists('data/tmp/index.php'))
148 {
149 createIndexPHP('data/tmp/index.php', $droitsFichiers);
150 }
141 // le modèle donnera les droits 0666 (octal) aux nouveaux fichiers à l'intérieur des dossiers 151 // le modèle donnera les droits 0666 (octal) aux nouveaux fichiers à l'intérieur des dossiers
142 152
143 // créer le melainePHP.zip 153 // créer le melainePHP.zip
144 if(!file_exists("data/melainePHP.zip")) 154 if(!file_exists("data/melainePHP.zip"))
145 { 155 {
146 require('controller/backup.php'); 156 require('controller/backup.php');
147 creerMelainePHP(); 157 createZipMelainePHP();
148 } 158 }
149 159
150 // création d'un mot de passe si password.txt est vide 160 // création d'un mot de passe si password.txt est vide