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; | ||