diff options
| author | polo <ordipolo@gmx.fr> | 2022-03-28 03:45:38 +0200 |
|---|---|---|
| committer | polo <ordipolo@gmx.fr> | 2022-03-28 03:45:38 +0200 |
| commit | 4873117ec6aeb86ef169cbf8750123ca24041cdf (patch) | |
| tree | 7f8ec95171e74d03d9cd9a6edc12108ecbd59785 /controller | |
| parent | 92a4565f303f5b9f273a8d1eb74d52ac541e89bc (diff) | |
| download | melaine-4873117ec6aeb86ef169cbf8750123ca24041cdf.tar.gz melaine-4873117ec6aeb86ef169cbf8750123ca24041cdf.tar.bz2 melaine-4873117ec6aeb86ef169cbf8750123ca24041cdf.zip | |
upload gros zip AJAX
Diffstat (limited to 'controller')
| -rw-r--r-- | controller/backup.php | 145 | ||||
| -rw-r--r-- | controller/installation.php | 12 |
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 |
| 5 | function sauvegarder($from) | 5 | function 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 | ||
| 24 | function creerMelainePHP() | 24 | function 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 | ||
| 102 | function restaurer($from) | 102 | function 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 ré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 | |||
| 158 | function 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 | ||
| 206 | function 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 |
