From f331b3ab14f2b404c2089607aba2e2d434cd510d Mon Sep 17 00:00:00 2001 From: polo Date: Thu, 10 Mar 2022 03:12:58 +0100 Subject: fichiers index.php --- controller/Security.php | 6 ++-- controller/backup.php | 70 +++++++++++++++++++++++++-------------------- controller/ckeditor.php | 40 +++++++++++++++++++------- controller/installation.php | 38 +++++++++++++----------- 4 files changed, 92 insertions(+), 62 deletions(-) (limited to 'controller') diff --git a/controller/Security.php b/controller/Security.php index c53cdc6..15c44b2 100644 --- a/controller/Security.php +++ b/controller/Security.php @@ -1,9 +1,6 @@ open($nomFichier, ZipArchive::RDONLY) === TRUE) - { - $j = 0; - for($i = 0; $i < $Zip->numFiles; $i++) + // extraction + try + { + $Zip = new ZipArchive(); + } + catch (Throwable $e) // l'extension zip n'est pas activée { - $nomEntree = $Zip->getNameIndex($i); - if($Zip->extractTo('.', $nomEntree) === TRUE) + echo($e); + die(); + } + if($Zip->open($nomFichier, ZipArchive::RDONLY) === TRUE) + { + $j = 0; + for($i = 0; $i < $Zip->numFiles; $i++) { - $j++; + $nomEntree = $Zip->getNameIndex($i); + if($Zip->extractTo('.', $nomEntree) === TRUE) + { + $j++; + } + else + { + $message = '

Erreur: extraction du zip impossible.

'; + } + chmod($nomEntree, 0666); } - else + + if($j == $Zip->numFiles) { - $message = '

Erreur: extraction du zip impossible.

'; + $message = '

Restauration réussie !!

'; } - chmod($nomEntree, 0666); + $Zip->close(); } - - if($j == $Zip->numFiles) + else { - $message = '

Restauration réussie !!

'; + // mauvais fichier + $message = '

Erreur: Impossible d\'ouvrir l\'archive Zip."

'; } - $Zip->close(); } else { - // mauvais fichier - $message = '

Erreur: Impossible d\'ouvrir l\'archive Zip."

'; + // pas de module zip + $message = '

Erreur: Veuillez activer l\'extension zip dans le php.ini pour pouvoir gérer les sauvegardes.

'; } } elseif(isset($_FILES['archive']) && $_FILES['archive']['error'] != 0) diff --git a/controller/ckeditor.php b/controller/ckeditor.php index 4b4297a..d6ea8ad 100644 --- a/controller/ckeditor.php +++ b/controller/ckeditor.php @@ -47,6 +47,9 @@ function submitCKeditor() if(isset($_POST['contenu'])) // optionnel pour discographie { $contenu = Security::secureString($_POST['contenu']); + + // liens sans http:// devant + $contenu = fixLinks($contenu); // récupérer les liens multimedia //require("media.php"); @@ -142,14 +145,29 @@ function submitCKeditor() // lien sans http:// -// un clic sur un lien dans l'éditeur affiche une infobulle montrant l'adresse cible du lien si celle-ci a déjà été précisée -// il est possible de cliquer sur ce lien, ce qui ouvre un onglet avec le site demandé -// toutefois si cette adresse est de type "domaine.fr" (sans http:// devant), le navigateur ne va pas rechercher un site mais un fichier comme si mon adresse était de type file:///fichier -// tomber ainsi sur une page d'erreur est déroutant: -// "ai-je perdu le texte que j'étais en train de taper?"" -// solution 1 (mauvaise): activer la redirection en cas d'erreur 404 dans le .htaccess -// solution 2 (façon pop-up): fermer ce nouvel onglet avec echo ''; -// pour faire passer par le .htaccess l'info comme quoi la page précédente comportait un éditeur ouvert... - -function cleanHTML($contenu) -{} +// si une adresse est de type "domaine.fr" sans le http:// devant, le comportement des navigateurs est de rechercher un fichier comme si mon adresse commençait par file:// +// tomber ainsi sur une page d'erreur est parfaitement déroutant +// une erreur 404 est détectée et le visiteur redirigé, mais ça ne règle pas le problème +// 2ème problème, en train d'écrire un article, l'utilisateur clique sur ce lien qu'il vient de créer et qui apparaît dans l'infobulle, un nouvelle onglet apparaît +// solution: fermer ce nouvel onglet avec echo ''; +// le .htaccess doit pour ça détecter que l'erreur 404 est particulière + +function fixLinks($data) +{ + // regex pour détecter les balises , analyser les liens à l'interieur et les modifier si nécessaire + $pattern = '#.*#'; + + if(preg_match($pattern, $data)) + {} + + //$remplacement = 'http://$0'; + //$data = preg_replace($pattern, $remplacement, $data); + + // contrairement à ce qui dit la doc + // https://www.php.net/manual/fr/filter.filters.validate.php + // une adresse du type "domaine.fr" ne passe pas le filtre + // il renvoie false, ce qui nous arrange ici! + //var_dump(filter_var($link, FILTER_VALIDATE_URL)); + + return($data); +} diff --git a/controller/installation.php b/controller/installation.php index e8b1af8..0bd56c2 100644 --- a/controller/installation.php +++ b/controller/installation.php @@ -68,10 +68,19 @@ function installation() require('view/backup.php'); exit(); } - if(!file_exists('data/index.html')) + + function createIndexPHP($path, $droitsFichiers) + { + $content = "