diff options
Diffstat (limited to 'imageAJAX.php')
| -rw-r--r-- | imageAJAX.php | 100 |
1 files changed, 0 insertions, 100 deletions
diff --git a/imageAJAX.php b/imageAJAX.php deleted file mode 100644 index 0831986..0000000 --- a/imageAJAX.php +++ /dev/null | |||
| @@ -1,100 +0,0 @@ | |||
| 1 | <?php | ||
| 2 | // imageAJAX.php | ||
| 3 | // | ||
| 4 | // le problème pour écrire ce fichier est qu'il est impossible d'afficher le contenu des variables avec "echo" ou "var_dump" | ||
| 5 | // puisqu'on reste toujours sur la même page, il y a heureusement au moins deux manières de faire autrement: | ||
| 6 | // - avec les outils de développement du navigateur (utiliser firefox ou chromium/chrome mais pas les autres) | ||
| 7 | // - écrire les données dans un fichier de log | ||
| 8 | |||
| 9 | // ce fichier est autonome vis-à-vis du reste du code PHP et sert uniquement à traiter les requêtes AJAX, | ||
| 10 | // il reçoit un POST du "simple upload adapter", un plugin du ckeditor qui sert faire de l'AJAX | ||
| 11 | // ce POST est une image et s'appelle 'upload', c'est à dire le tableau $_FILES['upload'] | ||
| 12 | // à la fin on retournera une chaine de caractères avec "echo" et au format json (parce que c'est ce que demande le client) | ||
| 13 | |||
| 14 | // avec firefox, faire un clic droit dans la page et cliquer sur examiner l'élément, ou faire Ctrl + Maj + i | ||
| 15 | // une fois dans les outils de dev, aller dans la section "Réseau", et ensuite essayer d'uploader un fichier | ||
| 16 | // de nombreuses infos sur la dernière requête envoyée apparaissent: | ||
| 17 | // fichier = imageAJAX.php | ||
| 18 | // initiateur = ckeditor.js | ||
| 19 | // état = code HTTP (200 = ok, 400 = erreur dans l'adresse du fichier .php, 500 = erreur interne au serveur) | ||
| 20 | // méthode = POST | ||
| 21 | // les onglets "En-têtes", "Requête" et "Réponse" donnent d'autres infos: | ||
| 22 | // l'onglet "Requête" affiche name="upload", | ||
| 23 | // l'onglet "Réponse" montre tout le tableau $_FILES si le PHP comporte l'instruction: $upload = var_dump($_FILES); | ||
| 24 | |||
| 25 | // pour que le ckeditor arrête de renvoyer une erreur, j'ai donc dû: | ||
| 26 | // - passer du code 500 au code 200, ce qui nécessite d'écrire quelque chose avec "echo", "var_dump", "print_r", etc | ||
| 27 | // - et que la chaine écrite avec PHP soit au format json, ce qu'on obtient avec la fonction json_encode' | ||
| 28 | |||
| 29 | // nous souhaitons bien sûr enregistrer le fichier et renvoyer une chaine json utilisable par le ckeditor | ||
| 30 | // nous devons donc autoriser les bons dossiers en écriture, dont celui des fichiers temporaires du système d'exploitation | ||
| 31 | // et renvoyer cette chaîne en json: | ||
| 32 | //{ | ||
| 33 | // "url": "chemin/images/foo.jpg" | ||
| 34 | //} | ||
| 35 | |||
| 36 | // debuggage | ||
| 37 | /*print_r($_FILES); | ||
| 38 | $upload = array( | ||
| 39 | 'name' => $_FILES['upload']['name'], | ||
| 40 | 'type' => $_FILES['upload']['type'], | ||
| 41 | 'tmp_name' => $_FILES['upload']['tmp_name'], | ||
| 42 | 'error' => $_FILES['upload']['error'], | ||
| 43 | 'size' => $_FILES['upload']['size'] | ||
| 44 | ); | ||
| 45 | print_r($upload);*/ | ||
| 46 | |||
| 47 | session_start(); | ||
| 48 | // et une backdoor de fermée! | ||
| 49 | if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1 || !isset($_FILES['upload']) || empty($_FILES['upload'])) | ||
| 50 | { | ||
| 51 | header('Location: index.php?erreur=imageajax'); | ||
| 52 | } | ||
| 53 | |||
| 54 | // get envoyé avec le javascript | ||
| 55 | $page = $_GET['page']; | ||
| 56 | |||
| 57 | // déjà fait dans installation.php | ||
| 58 | if(!file_exists('data/' . $page . '/images')) | ||
| 59 | { | ||
| 60 | mkdir('data/' . $page . '/images', 0777); | ||
| 61 | chmod('data/' . $page . '/images', 0777); | ||
| 62 | } | ||
| 63 | |||
| 64 | // taille en Mo à adapter au serveur (2Mo est la valeur par défaut dans le php.ini) | ||
| 65 | $tailleMax = 2000000; | ||
| 66 | $erreur = ''; | ||
| 67 | |||
| 68 | // traitement et enregistrement de l'image | ||
| 69 | if (isset($_FILES['upload']) AND $_FILES['upload']['error'] == 0) // 0 signifie ok | ||
| 70 | { | ||
| 71 | if ($_FILES['upload']['size'] <= $tailleMax ) | ||
| 72 | { | ||
| 73 | $infos = pathinfo ($_FILES['upload']['name']); | ||
| 74 | $extension = $infos['extension']; | ||
| 75 | $extautorisées = array('jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'tiff'); | ||
| 76 | // on prend la même liste que celle côté javascript, le SVG est bloqué pour raison de sécurité (javascript à l'intérieur) | ||
| 77 | if (in_array ($extension, $extautorisées)) | ||
| 78 | { | ||
| 79 | move_uploaded_file ($_FILES['upload']['tmp_name'], 'data/' . $page . '/images/' . $_FILES['upload']['name']); | ||
| 80 | chmod('data/' . $page . '/images/' . $_FILES['upload']['name'], 0666); | ||
| 81 | } | ||
| 82 | else{$erreur = 'mauvais format, veuillez utiliser une image comportant un de ces formats: jpg ou jpeg, png, gif, bmp, webp, tiff<br />le format svg n\'est pas supporté';} | ||
| 83 | } | ||
| 84 | else{$erreur = 'fichier trop lourd';} | ||
| 85 | } | ||
| 86 | else{$erreur = $_FILES['upload']['error'];} | ||
| 87 | /* les erreurs retournées avec $_FILES['upload']['error']: | ||
| 88 | 0 pas d'erreur | ||
| 89 | 1 taille du fichier supérieure à la valeur de upload_max_filesize dans le fichier php.ini (par défaut = 2 MO) | ||
| 90 | 2 taille du fichier supérieure à la valeur de MAX_FILE_SIZE dans le formulaire HTML | ||
| 91 | 3 fichier partiellement téléchargé | ||
| 92 | 4 pas de fichier du tout | ||
| 93 | 6 pas de dossier temporaire pour mettre le fichier | ||
| 94 | 7 echec de l'écriture sur le DD | ||
| 95 | 8 envoi arrêté par une extension de PHP mais on ne nous dit pas pourquoi => diagnostic avec la fonction phpinfo() */ | ||
| 96 | |||
| 97 | // nouveau chemin à renvoyer en format json | ||
| 98 | $chemin = '{"url": "data/' . $page . '/images/' . $_FILES['upload']['name'] . '"}'; | ||
| 99 | //echo json_encode($chemin); | ||
| 100 | echo $chemin; | ||
