diff options
| author | polo <ordipolo@gmx.fr> | 2022-07-06 01:59:48 +0200 |
|---|---|---|
| committer | polo <ordipolo@gmx.fr> | 2022-07-06 01:59:48 +0200 |
| commit | ed5df18ed28a338ecd763e6492991ccbf5e23eb0 (patch) | |
| tree | d1112d52bf89856f0edbb2dfbdb02b3423c50ecd | |
| parent | 9608a1de748363403b410cc4193f791419e6efc0 (diff) | |
| download | melaine-ed5df18ed28a338ecd763e6492991ccbf5e23eb0.tar.gz melaine-ed5df18ed28a338ecd763e6492991ccbf5e23eb0.tar.bz2 melaine-ed5df18ed28a338ecd763e6492991ccbf5e23eb0.zip | |
rangement du code
| -rw-r--r-- | .htaccess | 8 | ||||
| -rw-r--r-- | controller/ajax.php | 60 | ||||
| -rw-r--r-- | controller/backup.php | 2 | ||||
| -rw-r--r-- | controller/config.php | 63 | ||||
| -rw-r--r-- | controller/installation.php | 92 | ||||
| -rw-r--r-- | controller/password.php | 3 | ||||
| -rw-r--r-- | dependances.php | 67 | ||||
| -rw-r--r-- | erreur404.php | 11 | ||||
| -rw-r--r-- | index.php | 68 | ||||
| -rw-r--r-- | model/Album.php | 8 | ||||
| -rw-r--r-- | model/Image.php | 30 |
11 files changed, 195 insertions, 217 deletions
| @@ -1,12 +1,8 @@ | |||
| 1 | # redirection en cas d'erreur 404 | 1 | # redirection en cas d'erreur 404 |
| 2 | # ne décocher qu'une seule ligne "ErrorDocument" | ||
| 2 | 3 | ||
| 3 | # site simple | 4 | # site simple |
| 4 | #ErrorDocument 404 http://localhost/melaine/erreur404.php | 5 | #ErrorDocument 404 http://localhost/melaine/erreur404.php |
| 5 | 6 | ||
| 6 | # site "hôte virtuel" (cas des hébergeurs et d'une debian par défaut) | 7 | # site "hôte virtuel" (cas des hébergeurs et d'une debian par défaut) |
| 7 | ErrorDocument 404 http://melaine.localhost/erreur404.php | 8 | ErrorDocument 404 /erreur404.php |
| 8 | #ErrorDocument 404 "<a href='http://melaine.localhost/erreur404.php' >retour au site</a>" | ||
| 9 | |||
| 10 | # Interdire l'exploration des répertoires | ||
| 11 | # mettre un .htaccess avec cette ligne dans chacun des dossiers à la racine | ||
| 12 | # Options -Indexes | ||
diff --git a/controller/ajax.php b/controller/ajax.php new file mode 100644 index 0000000..489e814 --- /dev/null +++ b/controller/ajax.php | |||
| @@ -0,0 +1,60 @@ | |||
| 1 | <?php | ||
| 2 | // controller/ajax.php | ||
| 3 | |||
| 4 | // traitement des requêtes AJAX | ||
| 5 | // -> insertion d'une image dans l'éditeur | ||
| 6 | if(isset($_GET['action']) && isset($_GET['page']) && $_GET['action'] == 'upload_image') | ||
| 7 | { | ||
| 8 | // sécurité !! | ||
| 9 | if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1 | ||
| 10 | || !isset($_FILES['upload']) || empty($_FILES['upload'])) | ||
| 11 | { | ||
| 12 | // sans effet? | ||
| 13 | header('Location: index.php?erreur=image_ajax'); | ||
| 14 | } | ||
| 15 | else | ||
| 16 | { | ||
| 17 | require('model/Image.php'); | ||
| 18 | // paramètre "true" parce qu'on reçoit une requête AJAX | ||
| 19 | $Image = new Image(true); | ||
| 20 | $Image->upload(); | ||
| 21 | echo($Image->reponseAjax); // attendu par l'éditeur | ||
| 22 | } | ||
| 23 | exit; // stop !! | ||
| 24 | } | ||
| 25 | |||
| 26 | // page restauration quand le fichier zip est lourd | ||
| 27 | // -> input file onchange | ||
| 28 | if(isset($_GET['action']) && $_GET['action'] == 'restauration' | ||
| 29 | && isset($_GET['file_name']) && isset($_GET['file_size'])) | ||
| 30 | { | ||
| 31 | if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1) | ||
| 32 | { | ||
| 33 | header('Location: index.php?erreur=file_infos_ajax'); | ||
| 34 | } | ||
| 35 | else | ||
| 36 | { | ||
| 37 | $_SESSION['fileSize'] = $_GET['file_size']; | ||
| 38 | $_SESSION['fileName'] = $_GET['file_name']; | ||
| 39 | //echo("file infos send"); | ||
| 40 | var_dump($_SESSION['fileName']); | ||
| 41 | exit(); // stop !! | ||
| 42 | } | ||
| 43 | } | ||
| 44 | // -> input submit onclick | ||
| 45 | if(isset($_GET['action']) && $_GET['action'] == 'restauration' | ||
| 46 | && isset($_GET['chunk_name']) && isset($_FILES['blob'])) | ||
| 47 | { | ||
| 48 | |||
| 49 | if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1) | ||
| 50 | { | ||
| 51 | header('Location: index.php?erreur=upload_ajax'); | ||
| 52 | } | ||
| 53 | else | ||
| 54 | { | ||
| 55 | require('controller/backup.php'); | ||
| 56 | uploadChunkAndMerge(); | ||
| 57 | echo('file send'); | ||
| 58 | exit(); // stop !! | ||
| 59 | } | ||
| 60 | } \ No newline at end of file | ||
diff --git a/controller/backup.php b/controller/backup.php index 62f08a1..014a6cb 100644 --- a/controller/backup.php +++ b/controller/backup.php | |||
| @@ -156,10 +156,12 @@ function restoreData($path) | |||
| 156 | return($message); | 156 | return($message); |
| 157 | } | 157 | } |
| 158 | 158 | ||
| 159 | |||
| 159 | function pageRestauration($from) | 160 | function pageRestauration($from) |
| 160 | { | 161 | { |
| 161 | $title = 'Restauration des données'; | 162 | $title = 'Restauration des données'; |
| 162 | $message = ''; | 163 | $message = ''; |
| 164 | // taille max des fichiers dans le php.ini (défaut = 2M) | ||
| 163 | global $maxWeight; | 165 | global $maxWeight; |
| 164 | 166 | ||
| 165 | // recharger la même page en écrivant les données | 167 | // recharger la même page en écrivant les données |
diff --git a/controller/config.php b/controller/config.php new file mode 100644 index 0000000..47b85f9 --- /dev/null +++ b/controller/config.php | |||
| @@ -0,0 +1,63 @@ | |||
| 1 | <?php | ||
| 2 | // controller/config.php | ||
| 3 | |||
| 4 | // Ce fichier sert à: | ||
| 5 | // => vérifier la disponibilité des extensions PHP | ||
| 6 | // => obtenir des variables globales | ||
| 7 | // => permettre une configuration à la main par l'utilisateur | ||
| 8 | |||
| 9 | |||
| 10 | // mode de stockage des données, écrire 'files' ou 'database' | ||
| 11 | $storage = 'files'; | ||
| 12 | // laisser 'files'!! | ||
| 13 | // l'utilisation d'une BDD n'est pas prévue pour l'instant | ||
| 14 | |||
| 15 | // Racine du site (inutile pour l'instant) | ||
| 16 | //$root = getcwd(); | ||
| 17 | |||
| 18 | // nom de domaine (inutile pour l'instant) | ||
| 19 | //$host = $_SERVER['HTTP_HOST']; | ||
| 20 | |||
| 21 | // bibliothèque utilisée pour créer les miniatures | ||
| 22 | if(extension_loaded("imagick")) // on préfère imagemagick | ||
| 23 | { | ||
| 24 | $imageLibrary = 'imagick'; | ||
| 25 | } | ||
| 26 | elseif(extension_loaded('gd')) | ||
| 27 | { | ||
| 28 | $imageLibrary = 'gd'; | ||
| 29 | } | ||
| 30 | else | ||
| 31 | { | ||
| 32 | echo('<script>alert(\'Erreur: Une de ces extensions de PHP est nécessaire: imagemagick ou GD. Veuillez activer une des deux dans le fichier php.ini ou installer le paquet php-imagick ou php-gd.\');</script>'); | ||
| 33 | } | ||
| 34 | |||
| 35 | // format dans lequel créer les sauvegardes | ||
| 36 | // zip uniquement pour l'instant | ||
| 37 | if(extension_loaded("zip")) | ||
| 38 | { | ||
| 39 | $archiveFormat = 'zip'; | ||
| 40 | } | ||
| 41 | else | ||
| 42 | { | ||
| 43 | echo('<script>alert(\'Erreur: PHP doit être capable de gérer les archives. Veuillez activer zip dans le fichier php.ini.\');</script>'); | ||
| 44 | } | ||
| 45 | |||
| 46 | |||
| 47 | // conversion des 2M du php.ini en 2000000 | ||
| 48 | // les kibi, mébi et gibi sont inutiles ici | ||
| 49 | function returnBytes ($size_str) // chaine du style '2M' | ||
| 50 | { | ||
| 51 | switch (substr ($size_str, -1)) | ||
| 52 | { | ||
| 53 | case 'Ki': case 'ki': return (int)$size_str * 1024; | ||
| 54 | case 'Mi': case 'mi': return (int)$size_str * 1048576; | ||
| 55 | case 'Gi': case 'gi': return (int)$size_str * 1073741824; | ||
| 56 | case 'K': case 'k': return (int)$size_str * 1000; | ||
| 57 | case 'M': case 'm': return (int)$size_str * 1000000; | ||
| 58 | case 'G': case 'g': return (int)$size_str * 1000000000; | ||
| 59 | default: return $size_str; | ||
| 60 | } | ||
| 61 | } | ||
| 62 | // taille max des fichiers dans le php.ini (défaut = 2M) | ||
| 63 | $maxWeight = returnBytes(ini_get('upload_max_filesize')); | ||
diff --git a/controller/installation.php b/controller/installation.php index 1c90026..b2a687c 100644 --- a/controller/installation.php +++ b/controller/installation.php | |||
| @@ -1,54 +1,36 @@ | |||
| 1 | <?php | 1 | <?php |
| 2 | // controller/installation.php | ||
| 3 | |||
| 2 | // premier démarrage du site | 4 | // premier démarrage du site |
| 3 | function installation() | 5 | function installation() |
| 4 | { | 6 | { |
| 5 | // les chemins dans le .htaccess seront des chemins relatifs, | 7 | // présence du .htaccess |
| 6 | // la racine dépendant du serveur, donc de l'hébergeur, | ||
| 7 | // par défaut c'est /var/www/ pour debian, etc | ||
| 8 | // c'est /var/www/nom_de_domaine/ avec des hôtes virtuels | ||
| 9 | // on utilisera donc des chemins adaptés à des hôtes virtuels | ||
| 10 | |||
| 11 | // le nom du serveur sera le nom de domaine tout court | ||
| 12 | // la racine sera /var/www/nom_de_domaine | ||
| 13 | |||
| 14 | //echo('document root: ' . $_SERVER['DOCUMENT_ROOT'] . '<br />'); | ||
| 15 | //echo('server name: ' . $_SERVER['SERVER_NAME'] . '<br /'); | ||
| 16 | // echo('getcwd: ' . getcwd() . '<br />'); | ||
| 17 | // echo('dirname: ' . dirname(__FILE__) . '<br />'); | ||
| 18 | // echo('file: ' . __FILE__ . '<br />'); | ||
| 19 | // echo('dir: ' . __DIR__. '<br />'); | ||
| 20 | |||
| 21 | //$lien_htaccess = $_SERVER['SERVER_NAME'] . "/.htaccess"; | ||
| 22 | //$nomDuSite = "melaine"; | ||
| 23 | |||
| 24 | // créer le .htaccess | ||
| 25 | if(!file_exists(".htaccess")) | 8 | if(!file_exists(".htaccess")) |
| 26 | { | 9 | { |
| 27 | echo('<p style="color: red;" >Le .htaccess semble absent ce qui rend le site vulnérable, veuillez contacter l\'administrateur.</p>'); | 10 | $contenu = "ErrorDocument 404 /erreur404.php"; |
| 28 | //$contenu = "# redirection en cas d'erreur 404\nErrorDocument 404 http://" . $_SERVER['SERVER_NAME'] . "/" . $nomDuSite . "/erreur404.php\n# Interdire exploration du répertoire\nOptions All -Indexes"; | 11 | |
| 12 | echo('<p style="color: orange; text-align:center;" >Le .htaccess est absent.<br/> | ||
| 13 | Si vous ne savez pas de quoi il s\'agit, contactez le responsable du site.<br/> | ||
| 14 | Sinon, veuillez créer un fichier nommé .htaccess à la racine du site et y copier-coller la ligne suivante:<br/><br/> | ||
| 15 | <i>' . $contenu . '</i></p>'); | ||
| 16 | |||
| 17 | // Pour le créer | ||
| 18 | // laisser commenté, la création risque d'échouer | ||
| 29 | // $fichier = fopen('.htaccess', 'w'); | 19 | // $fichier = fopen('.htaccess', 'w'); |
| 30 | // fputs($fichier, $contenu); | 20 | // fputs($fichier, $contenu); |
| 31 | // fclose($fichier); | 21 | // fclose($fichier); |
| 32 | // chmod('.htaccess', 0666); // mettre 0644 en production | 22 | // chmod('.htaccess', 0666); // mettre 0644 en production |
| 33 | } | 23 | } |
| 34 | 24 | ||
| 35 | // droits en lecture et écriture dans le cas d'une migration | 25 | |
| 36 | // tester si le site est "vide" et prévoir un formulaire permettant d'upload le fichier .zip | 26 | // dans le cas de l'utilisation d'une base de données, le fichiers zip devrait contenir un "dump" (un fichier .sql), |
| 37 | // contenant toutes les données qu'il est possible de créer depuis le mode admin | 27 | // à voir si php est capable d'obtenir ou redonner ce fichier à la BDD |
| 38 | // cette méthode a deux intérêts: | ||
| 39 | // - facilité pour l'utilisateur | ||
| 40 | // - toutes les données sont la "possession" du serveur apache, | ||
| 41 | // on prévient ainsi tous les futurs problèmes de droits | ||
| 42 | |||
| 43 | // dans le cas de l'utilisation d'une base de données, le fichiers zip devrait contenir un "dump" | ||
| 44 | // (un fichier .sql), à voir si php est capable d'obtenir ou redonner ce fichier à la BDD | ||
| 45 | 28 | ||
| 46 | // créer les dossiers (fait également à l'extraction du zip de données) | ||
| 47 | // attention: ne fonctionne pas sans une manipulation préalable | ||
| 48 | // - modifier soit-même les droits du dossier data pour 777 | ||
| 49 | // - modifier ceux du dossier parent (nom du site) avec son client FTP à la mise en ligne chez l'hébergeur et ensuite remettre tout comme avant | ||
| 50 | 29 | ||
| 51 | // création des dossiers | 30 | // création des dossiers |
| 31 | // attention: ne fonctionne pas sans une manipulation préalable | ||
| 32 | // - créer le dossier data à la racine du site | ||
| 33 | // - lui donner les droits du dossier data pour 777 | ||
| 52 | 34 | ||
| 53 | // valeur en octal | 35 | // valeur en octal |
| 54 | $droitsDossiers = 0777; // mettre 0755 en production | 36 | $droitsDossiers = 0777; // mettre 0755 en production |
| @@ -61,22 +43,13 @@ function installation() | |||
| 61 | require('view/backup.php'); | 43 | require('view/backup.php'); |
| 62 | exit(); | 44 | exit(); |
| 63 | } | 45 | } |
| 64 | if(!touch('data')) | 46 | if(!touch('data')) // test autorisation en écriture |
| 65 | { | 47 | { |
| 66 | $erreur = 'data'; | 48 | $erreur = 'data'; |
| 67 | $title = 'Écriture non autorisée dans le dossier data'; | 49 | $title = 'Écriture non autorisée dans le dossier data'; |
| 68 | require('view/backup.php'); | 50 | require('view/backup.php'); |
| 69 | exit(); | 51 | exit(); |
| 70 | } | 52 | } |
| 71 | |||
| 72 | function createIndexPHP($path, $droitsFichiers) | ||
| 73 | { | ||
| 74 | $content = "<?php\nheader('Location: ../index.php');\nexit();"; | ||
| 75 | $file = fopen($path, 'w'); | ||
| 76 | fputs($file, $content); | ||
| 77 | fclose($file); | ||
| 78 | chmod($path, $droitsFichiers); | ||
| 79 | } | ||
| 80 | 53 | ||
| 81 | if(!file_exists('data/index.php')) | 54 | if(!file_exists('data/index.php')) |
| 82 | { | 55 | { |
| @@ -113,6 +86,15 @@ function installation() | |||
| 113 | { | 86 | { |
| 114 | createIndexPHP('data/' . $page . '/images/index.php', $droitsFichiers); | 87 | createIndexPHP('data/' . $page . '/images/index.php', $droitsFichiers); |
| 115 | } | 88 | } |
| 89 | if(!file_exists('data/' . $page . '/images-mini')) | ||
| 90 | { | ||
| 91 | mkdir('data/' . $page . '/images-mini'); | ||
| 92 | chmod('data/' . $page . '/images-mini', $droitsDossiers); | ||
| 93 | } | ||
| 94 | if(!file_exists('data/' . $page . '/images-mini/index.html')) | ||
| 95 | { | ||
| 96 | createIndexPHP('data/' . $page . '/images-mini/index.php', $droitsFichiers); | ||
| 97 | } | ||
| 116 | // if(!file_exists('data/' . $page . '/multimedia')) | 98 | // if(!file_exists('data/' . $page . '/multimedia')) |
| 117 | // { | 99 | // { |
| 118 | // mkdir('data/' . $page . '/multimedia'); | 100 | // mkdir('data/' . $page . '/multimedia'); |
| @@ -129,15 +111,6 @@ function installation() | |||
| 129 | { | 111 | { |
| 130 | createIndexPHP('data/discographie/json/index.php', $droitsFichiers); | 112 | createIndexPHP('data/discographie/json/index.php', $droitsFichiers); |
| 131 | } | 113 | } |
| 132 | if(!file_exists('data/discographie/images-mini')) | ||
| 133 | { | ||
| 134 | mkdir('data/discographie/images-mini'); | ||
| 135 | chmod('data/discographie/images-mini', $droitsDossiers); | ||
| 136 | } | ||
| 137 | if(!file_exists('data/discographie/images-mini/index.html')) | ||
| 138 | { | ||
| 139 | createIndexPHP('data/discographie/images-mini/index.php', $droitsFichiers); | ||
| 140 | } | ||
| 141 | // fichiers temporaires pour upload des grosses archives | 114 | // fichiers temporaires pour upload des grosses archives |
| 142 | if(!file_exists('data/tmp')) | 115 | if(!file_exists('data/tmp')) |
| 143 | { | 116 | { |
| @@ -160,3 +133,12 @@ function installation() | |||
| 160 | // création d'un mot de passe si password.txt est vide | 133 | // création d'un mot de passe si password.txt est vide |
| 161 | createPassword(); | 134 | createPassword(); |
| 162 | } | 135 | } |
| 136 | |||
| 137 | function createIndexPHP($path, $droitsFichiers) | ||
| 138 | { | ||
| 139 | $content = "<?php\nheader('Location: ../index.php');\nexit();"; | ||
| 140 | $file = fopen($path, 'w'); | ||
| 141 | fputs($file, $content); | ||
| 142 | fclose($file); | ||
| 143 | chmod($path, $droitsFichiers); | ||
| 144 | } | ||
diff --git a/controller/password.php b/controller/password.php index 8f6a875..e739363 100644 --- a/controller/password.php +++ b/controller/password.php | |||
| @@ -1,6 +1,5 @@ | |||
| 1 | <?php | 1 | <?php |
| 2 | // password.php | 2 | // controller/password.php |
| 3 | |||
| 4 | 3 | ||
| 5 | // affichage | 4 | // affichage |
| 6 | function createPassword() | 5 | function createPassword() |
diff --git a/dependances.php b/dependances.php deleted file mode 100644 index 216b639..0000000 --- a/dependances.php +++ /dev/null | |||
| @@ -1,67 +0,0 @@ | |||
| 1 | <?php | ||
| 2 | // dependances.php | ||
| 3 | |||
| 4 | // mentions légales dans le "footer" | ||
| 5 | // - entreprise | ||
| 6 | // n° RCS | ||
| 7 | // telephone | ||
| 8 | // n°identification TVA ? | ||
| 9 | // hébergeur | ||
| 10 | |||
| 11 | |||
| 12 | // mode de stockage des données | ||
| 13 | // écrire 'files' ou 'database' | ||
| 14 | $storage = 'files'; | ||
| 15 | // laisser 'files'!! | ||
| 16 | // l'utilisation d'une BDD n'est pas prévue pour l'instant | ||
| 17 | |||
| 18 | |||
| 19 | // à adapter au serveur apache pour attraper les erreurs 404 | ||
| 20 | // permet d'adapter le contenu du .htaccess | ||
| 21 | //$racineDuSite = '/var/www/melaine'; | ||
| 22 | $racineDusite = 'getcwd()'; | ||
| 23 | |||
| 24 | // bibliothèque utilisée pour créer les miniatures | ||
| 25 | if(extension_loaded("imagick")) | ||
| 26 | { | ||
| 27 | $imageLibrary = 'imagick'; | ||
| 28 | } | ||
| 29 | elseif(extension_loaded('gd')) | ||
| 30 | { | ||
| 31 | $imageLibrary = 'gd'; | ||
| 32 | } | ||
| 33 | else | ||
| 34 | { | ||
| 35 | echo('<script>alert(\'Erreur: Une de ces extensions de PHP est nécessaire: imagemagick ou GD. Veuillez activer une des deux dans le fichier php.ini ou installer le paquet php-imagick ou php-gd.\');</script>'); | ||
| 36 | } | ||
| 37 | |||
| 38 | // format des sauvegardes à la création | ||
| 39 | if(extension_loaded("zip")) | ||
| 40 | { | ||
| 41 | $archiveFormat = 'zip'; | ||
| 42 | } | ||
| 43 | else | ||
| 44 | { | ||
| 45 | echo('<script>alert(\'Erreur: PHP doit être capable de gérer les archives. Veuillez activer zip dans le fichier php.ini.\');</script>'); | ||
| 46 | } | ||
| 47 | |||
| 48 | |||
| 49 | // bout de code à déplacer dans controller/backup.php | ||
| 50 | // taille max des fichiers dans le php.ini (défaut = 2M) | ||
| 51 | $maxWeight = ini_get('upload_max_filesize'); | ||
| 52 | |||
| 53 | // on utilisera cette valeur dans "main.js" pour envoyer | ||
| 54 | // les fichiers un par un quand un zip est trop grand | ||
| 55 | |||
| 56 | // conversion des mégas en octets | ||
| 57 | function return_bytes ($size_str) | ||
| 58 | { | ||
| 59 | switch (substr ($size_str, -1)) | ||
| 60 | { | ||
| 61 | case 'M': case 'm': return (int)$size_str * 1048576; | ||
| 62 | case 'K': case 'k': return (int)$size_str * 1024; | ||
| 63 | case 'G': case 'g': return (int)$size_str * 1073741824; | ||
| 64 | default: return $size_str; | ||
| 65 | } | ||
| 66 | } | ||
| 67 | $maxWeight = return_bytes(ini_get('upload_max_filesize')); | ||
diff --git a/erreur404.php b/erreur404.php index 3059e70..e8fc033 100644 --- a/erreur404.php +++ b/erreur404.php | |||
| @@ -1,13 +1,9 @@ | |||
| 1 | <?php | 1 | <?php |
| 2 | // les erreurs 404 sont renvoyées ici par le .htaccess | 2 | // erreur404.php |
| 3 | header('Location: index.php?erreur=404'); | ||
| 4 | 3 | ||
| 5 | //echo '<script>javascript:window.close()</script>'; | 4 | // les erreurs 404 sont renvoyées ici par le .htaccess |
| 5 | header('Location: http://' . $_SERVER['HTTP_HOST'] . '/index.php?erreur=404'); | ||
| 6 | 6 | ||
| 7 | // Le fichier .htaccess est situé dans le répertoire racine du site (et non du serveur), il comporte cette ligne: | ||
| 8 | // ErrorDocument 404 /siteweb/erreur404.php | ||
| 9 | // en cas d'erreur 404, le serveur apache renverra le visiteur vers ce fichier (erreur404.php) | ||
| 10 | // | ||
| 11 | // ATTENTION depuis apache en version 2.4 le .htaccess est ignoré par défaut, il y a deux méthodes pour y remedier: | 7 | // ATTENTION depuis apache en version 2.4 le .htaccess est ignoré par défaut, il y a deux méthodes pour y remedier: |
| 12 | // - méthode facile et moins sécurisée: trouver la ligne "AllowOverride None" dans le fichier de conf d'apache et changer "None" par "All" | 8 | // - méthode facile et moins sécurisée: trouver la ligne "AllowOverride None" dans le fichier de conf d'apache et changer "None" par "All" |
| 13 | // - méthode sécurisée consistant à autoriser uniquement la directive ErrorDocument pour notre site, | 9 | // - méthode sécurisée consistant à autoriser uniquement la directive ErrorDocument pour notre site, |
| @@ -21,4 +17,3 @@ header('Location: index.php?erreur=404'); | |||
| 21 | // identifier l'adresse qui a provoqué l'erreur | 17 | // identifier l'adresse qui a provoqué l'erreur |
| 22 | // $_SERVER['REQUEST_URI'] | 18 | // $_SERVER['REQUEST_URI'] |
| 23 | // https://www.developpez.net/forums/d107096/php/langage/recuperer-url-erreur-404-a/ | 19 | // https://www.developpez.net/forums/d107096/php/langage/recuperer-url-erreur-404-a/ |
| 24 | |||
| @@ -14,72 +14,20 @@ if(!empty($_SESSION['erreur'])) | |||
| 14 | unset($_SESSION['erreur']); | 14 | unset($_SESSION['erreur']); |
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | // fichier destiné à l'utilisateur | 17 | // variables globales, dépendances et config par l'utilisateur |
| 18 | require('dependances.php'); | 18 | require('controller/config.php'); |
| 19 | 19 | ||
| 20 | // au premier démarrage du site | 20 | // au premier démarrage du site (création du dossier "data") |
| 21 | // l'explication des éventuels problèmes de droits en lecture/écriture est à chercher ici: | ||
| 22 | require('controller/installation.php'); | 21 | require('controller/installation.php'); |
| 22 | |||
| 23 | // penser à faire qu'on ne l'ouvre pas tout le temps | ||
| 24 | // -> présence du data/password.txt? | ||
| 23 | require('controller/password.php'); | 25 | require('controller/password.php'); |
| 24 | installation(); | ||
| 25 | 26 | ||
| 27 | installation(); | ||
| 26 | 28 | ||
| 27 | // traitement des requêtes AJAX | 29 | // traitement des requêtes AJAX |
| 28 | // -> insertion d'une image dans l'éditeur | 30 | require('controller/ajax.php'); |
| 29 | if(isset($_GET['action']) && isset($_GET['page']) && $_GET['action'] == 'upload_image') | ||
| 30 | { | ||
| 31 | // sécurité !! | ||
| 32 | if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1 | ||
| 33 | || !isset($_FILES['upload']) || empty($_FILES['upload'])) | ||
| 34 | { | ||
| 35 | // sans effet? | ||
| 36 | header('Location: index.php?erreur=image_ajax'); | ||
| 37 | } | ||
| 38 | else | ||
| 39 | { | ||
| 40 | require('model/Image.php'); | ||
| 41 | // paramètre "true" parce qu'on reçoit une requête AJAX | ||
| 42 | $Image = new Image(true); | ||
| 43 | $Image->upload(); | ||
| 44 | echo($Image->reponseAjax); // attendu par l'éditeur | ||
| 45 | } | ||
| 46 | exit; // stop !! | ||
| 47 | } | ||
| 48 | // page restauration quand le fichier zip est lourd | ||
| 49 | // -> input file onchange | ||
| 50 | if(isset($_GET['action']) && $_GET['action'] == 'restauration' | ||
| 51 | && isset($_GET['file_name']) && isset($_GET['file_size'])) | ||
| 52 | { | ||
| 53 | if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1) | ||
| 54 | { | ||
| 55 | header('Location: index.php?erreur=file_infos_ajax'); | ||
| 56 | } | ||
| 57 | else | ||
| 58 | { | ||
| 59 | $_SESSION['fileSize'] = $_GET['file_size']; | ||
| 60 | $_SESSION['fileName'] = $_GET['file_name']; | ||
| 61 | //echo("file infos send"); | ||
| 62 | var_dump($_SESSION['fileName']); | ||
| 63 | exit(); // stop !! | ||
| 64 | } | ||
| 65 | } | ||
| 66 | // -> input submit onclick | ||
| 67 | if(isset($_GET['action']) && $_GET['action'] == 'restauration' | ||
| 68 | && isset($_GET['chunk_name']) && isset($_FILES['blob'])) | ||
| 69 | { | ||
| 70 | |||
| 71 | if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1) | ||
| 72 | { | ||
| 73 | header('Location: index.php?erreur=upload_ajax'); | ||
| 74 | } | ||
| 75 | else | ||
| 76 | { | ||
| 77 | require('controller/backup.php'); | ||
| 78 | uploadChunkAndMerge(); | ||
| 79 | echo('file send'); | ||
| 80 | exit(); // stop !! | ||
| 81 | } | ||
| 82 | } | ||
| 83 | 31 | ||
| 84 | // traitement des POST du ckeditor | 32 | // traitement des POST du ckeditor |
| 85 | // la fonction submitCKeditor est "autonome", elle n'affiche rien puis redirige sans GET | 33 | // la fonction submitCKeditor est "autonome", elle n'affiche rien puis redirige sans GET |
diff --git a/model/Album.php b/model/Album.php index 3f13939..95dac50 100644 --- a/model/Album.php +++ b/model/Album.php | |||
| @@ -51,7 +51,7 @@ class Album extends Article | |||
| 51 | require('model/Image.php'); | 51 | require('model/Image.php'); |
| 52 | $Image = new Image(false); | 52 | $Image = new Image(false); |
| 53 | $Image->upload(); | 53 | $Image->upload(); |
| 54 | $Image->makeThumbnail(); | 54 | $Image->makeThumbnail(201); |
| 55 | 55 | ||
| 56 | $erreur = $Image->erreur; | 56 | $erreur = $Image->erreur; |
| 57 | if(!empty($erreur)) | 57 | if(!empty($erreur)) |
| @@ -181,7 +181,7 @@ class Album extends Article | |||
| 181 | require('model/Image.php'); | 181 | require('model/Image.php'); |
| 182 | $Image = new Image(false); | 182 | $Image = new Image(false); |
| 183 | $Image->upload(); | 183 | $Image->upload(); |
| 184 | $Image->makeThumbnail(); | 184 | $Image->makeThumbnail(201); |
| 185 | $erreur = $Image->erreur; | 185 | $erreur = $Image->erreur; |
| 186 | if(!empty($erreur)) | 186 | if(!empty($erreur)) |
| 187 | { | 187 | { |
| @@ -205,12 +205,12 @@ class Album extends Article | |||
| 205 | // delete | 205 | // delete |
| 206 | public function delete() | 206 | public function delete() |
| 207 | { | 207 | { |
| 208 | parent::delete(); | 208 | parent::delete(); // json |
| 209 | 209 | ||
| 210 | if(file_exists('data/' . $this->page . '/html/' . $this->fileCode . '.' . $this->format)); | 210 | if(file_exists('data/' . $this->page . '/html/' . $this->fileCode . '.' . $this->format)); |
| 211 | { | 211 | { |
| 212 | $this->format = 'html'; | 212 | $this->format = 'html'; |
| 213 | parent::delete(); | 213 | parent::delete(); // html |
| 214 | } | 214 | } |
| 215 | } | 215 | } |
| 216 | } | 216 | } |
diff --git a/model/Image.php b/model/Image.php index 05773e9..59665e9 100644 --- a/model/Image.php +++ b/model/Image.php | |||
| @@ -16,8 +16,8 @@ class Image | |||
| 16 | public function __construct($ajax) | 16 | public function __construct($ajax) |
| 17 | { | 17 | { |
| 18 | // get envoyé avec le javascript | 18 | // get envoyé avec le javascript |
| 19 | $this->page = $_GET['page']; | ||
| 20 | $this->ajax = $ajax; | 19 | $this->ajax = $ajax; |
| 20 | $this->page = $_GET['page']; | ||
| 21 | $this->path = 'data/' . $this->page . '/images/'; | 21 | $this->path = 'data/' . $this->page . '/images/'; |
| 22 | $this->pathMini = 'data/' . $this->page . '/images-mini/'; | 22 | $this->pathMini = 'data/' . $this->page . '/images-mini/'; |
| 23 | } | 23 | } |
| @@ -60,11 +60,19 @@ class Image | |||
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | // miniatures des photos | 62 | // miniatures des photos |
| 63 | public function makeThumbnail() | 63 | public function makeThumbnail($largeur) |
| 64 | { | 64 | { |
| 65 | global $imageLibrary; | 65 | global $imageLibrary; |
| 66 | 66 | ||
| 67 | if($imageLibrary == 'gd') | 67 | if($imageLibrary == 'imagick') |
| 68 | { | ||
| 69 | $Image = new Imagick($this->path . $_FILES['upload']['name']); | ||
| 70 | // 0 signifie qu'on conserve les proportions | ||
| 71 | $Image->thumbnailImage($largeur, 0); | ||
| 72 | // écriture dans un fichier | ||
| 73 | $Image->writeImage($this->pathMini . $this->pathInfos['filename'] . '-mini.' . $this->pathInfos['extension']); | ||
| 74 | } | ||
| 75 | elseif($imageLibrary == 'gd') | ||
| 68 | { | 76 | { |
| 69 | // cette fonction fonctionne pour tous les formats | 77 | // cette fonction fonctionne pour tous les formats |
| 70 | $source = imagecreatefromstring(file_get_contents($this->path . $_FILES['upload']['name'])); | 78 | $source = imagecreatefromstring(file_get_contents($this->path . $_FILES['upload']['name'])); |
| @@ -74,15 +82,15 @@ class Image | |||
| 74 | $forme = imagesy($source) / imagesx($source); | 82 | $forme = imagesy($source) / imagesx($source); |
| 75 | var_dump($forme); | 83 | var_dump($forme); |
| 76 | 84 | ||
| 77 | if(imagesx($source) > 201) | 85 | if(imagesx($source) > $largeur) |
| 78 | { | 86 | { |
| 79 | // créer un rectangle noir | 87 | // créer un rectangle noir |
| 80 | $destination = imagecreatetruecolor(201, 201 * $forme); | 88 | $destination = imagecreatetruecolor($largeur, $largeur * $forme); |
| 81 | var_dump($destination); | 89 | //var_dump($destination); |
| 82 | 90 | ||
| 83 | // sélectionne un rectangle dans l'image source | 91 | // sélectionne un rectangle dans l'image source |
| 84 | // et le place dans un rectangle dans la nouvelle | 92 | // et le place dans un rectangle dans la nouvelle |
| 85 | imagecopyresampled($destination, $source, 0, 0, 0, 0, 201, 201 * $forme, imagesx($source), imagesy($source)); | 93 | imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur, $largeur * $forme, imagesx($source), imagesy($source)); |
| 86 | 94 | ||
| 87 | // envoie l'image dans un fichier | 95 | // envoie l'image dans un fichier |
| 88 | imagejpeg($destination, $nomMiniImage); | 96 | imagejpeg($destination, $nomMiniImage); |
| @@ -92,14 +100,6 @@ class Image | |||
| 92 | imagejpeg($source, $nomMiniImage); | 100 | imagejpeg($source, $nomMiniImage); |
| 93 | } | 101 | } |
| 94 | } | 102 | } |
| 95 | elseif($imageLibrary == 'imagick') | ||
| 96 | { | ||
| 97 | $Image = new Imagick($this->path . $_FILES['upload']['name']); | ||
| 98 | // 0 signifie qu'on conserve les proportions | ||
| 99 | $Image->thumbnailImage(201, 0); | ||
| 100 | // écriture dans un fichier | ||
| 101 | $Image->writeImage($this->pathMini . $this->pathInfos['filename'] . '-mini.' . $this->pathInfos['extension']); | ||
| 102 | } | ||
| 103 | else | 103 | else |
| 104 | { | 104 | { |
| 105 | // utiliser la grande image si il est impossible de créer une miniature | 105 | // utiliser la grande image si il est impossible de créer une miniature |
