summaryrefslogtreecommitdiff
path: root/imageAJAX.php
diff options
context:
space:
mode:
Diffstat (limited to 'imageAJAX.php')
-rw-r--r--imageAJAX.php100
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);
45print_r($upload);*/
46
47session_start();
48// et une backdoor de fermée!
49if(!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
58if(!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
69if (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}
86else{$erreur = $_FILES['upload']['error'];}
87/* les erreurs retournées avec $_FILES['upload']['error']:
880 pas d'erreur
891 taille du fichier supérieure à la valeur de upload_max_filesize dans le fichier php.ini (par défaut = 2 MO)
902 taille du fichier supérieure à la valeur de MAX_FILE_SIZE dans le formulaire HTML
913 fichier partiellement téléchargé
924 pas de fichier du tout
936 pas de dossier temporaire pour mettre le fichier
947 echec de l'écriture sur le DD
958 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);
100echo $chemin;