From 895cf7a438929f74c2e11996667685245a571f2a Mon Sep 17 00:00:00 2001 From: polo Date: Sun, 10 May 2026 17:01:21 +0200 Subject: partie client de la restauration de BDD, script bin/mysqldump.php, changements permissions dossiers, renommage ViewDirector --- src/service/Backup.php | 22 ++++++++++++++++++ src/service/Installation.php | 54 ++++++++++++++++++++++++++++++-------------- src/service/router.php | 2 +- 3 files changed, 60 insertions(+), 18 deletions(-) (limited to 'src/service') diff --git a/src/service/Backup.php b/src/service/Backup.php index d628c27..313d1f6 100644 --- a/src/service/Backup.php +++ b/src/service/Backup.php @@ -37,7 +37,12 @@ class Backup ]); try{ + // unlink et chmod permettent que le serveur et l'utilisateur appelant bin/mysqldump.php réussissent + if(file_exists($file_path)){ + unlink($file_path); + } $command->mustRun(); // comme run() mais lance une ProcessFailedException + chmod($file_path, 0666); return $file_path; } finally{ @@ -59,6 +64,23 @@ class Backup }*/ } + static public function getBackupList(): array + { + $backup_array = []; + foreach(scandir(Backup::$backup_dir) as $file){ + if($file[0] === '.'){ + continue; + } + $backup_array[] = $file; + } + return $backup_array; + } + static public function getLastBackupName(): string + { + $backup_list = self::getBackupList(); + return $backup_list[count($backup_list) - 1]; + } + static public function cleanBackups(): void { $files = glob(self::$backup_dir . '/*.sql'); usort($files, fn($a, $b) => filemtime($b) <=> filemtime($a)); // filemtime = date de dernière modification diff --git a/src/service/Installation.php b/src/service/Installation.php index eb4b6db..995ed4a 100644 --- a/src/service/Installation.php +++ b/src/service/Installation.php @@ -12,10 +12,14 @@ class Installation // ajouter plus tard zlib pour la compression des backups foreach($extensions as $extension){ if(!extension_loaded($extension)){ - echo("

l'extension " . $extension . ' est manquante

'); + echo("

l'extension " . $extension . " est manquante.

"); $flag = true; } } + if(!class_exists(DOMDocument::class)){ // théoriquement plus fiable que extension_loaded() + echo("

l'extension dom est manquante.

"); + $flag = true; + } /*if(!extension_loaded('imagick') && !extension_loaded('gd')){ echo("

il manque une de ces extensions au choix pour le traitement des images: imagick (de préférence) ou gd.

"); @@ -33,27 +37,40 @@ class Installation static public function checkFilesAndFoldersRights(): void { // -- droits des fichiers et dossiers -- - $droits_dossiers = 0755; - $droits_fichiers = 0644; + $droits_dossiers = 0777; + $flag = false; if(!file_exists('user_data')){ - // créer le dossier user_data - mkdir('user_data/'); - chmod('user_data/', $droits_dossiers); - echo '

Le dossier public/user_data introuvable et le serveur n\'a pas la permission de le créer.
- Pour faire ça bien:
sudo -u "serveur web" mkdir /chemin/du/site/public/user_data

-

Aide: "serveur web" se nomme "www-data" sur debian et ubuntu, il s\'appelera "http" sur d\'autres distributions.

'; - die; + try{ + mkdir('user_data/'); + chmod('user_data/', $droits_dossiers); + } + catch(Exception $e){ + echo '

Le dossier public/user_data introuvable et le serveur n\'a pas la permission de le créer.
+ Pour faire ça bien:
sudo -u "serveur web" mkdir /chemin/du/site/public/user_data

'; + echo $e; + $flag = true; + } } if(!file_exists('../var')){ - mkdir('../var'); - chmod('../var', $droits_dossiers); - // + try{ + mkdir('../var'); + chmod('../var', $droits_dossiers); + } + catch(Exception $e){ + echo $e; + $flag = true; + } } if(!file_exists('../var/backups')){ - mkdir('../var/backups'); - chmod('../var/backups', $droits_dossiers); - // + try{ + mkdir('../var/backups'); + chmod('../var/backups', $droits_dossiers); // autoriser à la fois le serveur et les scripts dans bin/ + } + catch(Exception $e){ + echo $e; + $flag = true; + } } // droits 600 pour celui-ci @@ -63,7 +80,7 @@ class Installation echo '

Il doit obligatoirement contenir les codes de la base de données, le protocole http ou https (et éventuellement le port) utilisé pour créer les liens internes.
Un modèle est disponible, il s\'agit du fichier config/config-template.ini

Ce fichier a une importance critique. Si vous le pouvez faites en sorte que le serveur en soit le propriétaire et donner lui des droits 600.

'; - die; + $flag = true; } /*else{ // propriétaire du fichier @@ -78,6 +95,9 @@ class Installation } } }*/ + if($flag){ + die; + } // tester les liens internes // diff --git a/src/service/router.php b/src/service/router.php index 6973656..98f8fd6 100644 --- a/src/service/router.php +++ b/src/service/router.php @@ -52,7 +52,7 @@ if($request->getMethod() === 'GET'){ } // construction d'une page - $response = (new ViewController)->buildView($entityManager, $request); // utilise Model + $response = (new ViewDirector)->buildView($entityManager, $request); // utilise Model // parenthèses nécéssaires autour de l'instanciation pour PHP < 8.4 } -- cgit v1.2.3