diff options
author | polo <ordipolo@gmx.fr> | 2021-04-20 21:46:33 +0200 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2021-04-20 21:46:33 +0200 |
commit | 87798e5554eb0330cd2de255e5034f0472d410a4 (patch) | |
tree | acd9e26a7d912c7575cb6dd1c7b42cc3e9f52993 /imageAJAX.php | |
download | melaine-87798e5554eb0330cd2de255e5034f0472d410a4.zip |
mot de passe
Diffstat (limited to 'imageAJAX.php')
-rw-r--r-- | imageAJAX.php | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/imageAJAX.php b/imageAJAX.php new file mode 100644 index 0000000..49c856d --- /dev/null +++ b/imageAJAX.php | |||
@@ -0,0 +1,100 @@ | |||
1 | <?php | ||
2 | // le problème pour écrire ce fichier est qu'il est impossible d'afficher le contenu des variables avec "echo" ou "var_dump" | ||
3 | // puisqu'on reste toujours sur la même page, il y a heureusement au moins deux manières de faire autrement: | ||
4 | // - avec les outils de développement du navigateur (utiliser firefox ou chromium/chrome mais pas les autres) | ||
5 | // - écrire les données dans un fichier de log | ||
6 | |||
7 | // ce fichier est autonome vis-à-vis du reste du code PHP et sert uniquement à traiter les requêtes AJAX, | ||
8 | // il reçoit un POST du "simple upload adapter", un plugin du ckeditor qui sert faire de l'AJAX | ||
9 | // ce POST est une image et s'appelle 'upload', c'est à dire le tableau $_FILES['upload'] | ||
10 | // à la fin on retournera une chaine de caractères avec "echo" et au format json (parce que c'est ce que demande le client) | ||
11 | |||
12 | // avec firefox, faire un clic droit dans la page et cliquer sur examiner l'élément, ou faire Ctrl + Maj + i | ||
13 | // une fois dans les outils de dev, aller dans la section "Réseau", et ensuite essayer d'uploader un fichier | ||
14 | // de nombreuses infos sur la dernière requête envoyée apparaissent: | ||
15 | // fichier = imageAJAX.php | ||
16 | // initiateur = ckeditor.js | ||
17 | // état = code HTTP (200 = ok, 400 = erreur dans l'adresse du fichier .php, 500 = erreur interne au serveur) | ||
18 | // méthode = POST | ||
19 | // les onglets "En-têtes", "Requête" et "Réponse" donnent d'autres infos: | ||
20 | // l'onglet "Requête" affiche name="upload", | ||
21 | // l'onglet "Réponse" montre tout le tableau $_FILES si le PHP comporte l'instruction: $upload = var_dump($_FILES); | ||
22 | |||
23 | // pour que le ckeditor arrête de renvoyer une erreur, j'ai donc dû: | ||
24 | // - passer du code 500 au code 200, ce qui nécessite d'écrire quelque chose avec "echo", "var_dump", "print_r", etc | ||
25 | // - et que la chaine écrite avec PHP soit au format json, ce qu'on obtient avec la fonction json_encode' | ||
26 | |||
27 | // nous souhaitons bien sûr enregistrer le fichier et renvoyer une chaine json utilisable par le ckeditor | ||
28 | // nous devons donc autoriser les bons dossiers en écriture, dont celui des fichiers temporaires du système d'exploitation | ||
29 | // et renvoyer cette chaîne en json: | ||
30 | //{ | ||
31 | // "url": "chemin/images/foo.jpg" | ||
32 | //} | ||
33 | |||
34 | // get envoyé avec le javascript | ||
35 | $page = $_GET['page']; | ||
36 | |||
37 | // debuggage | ||
38 | // $_FILES contient: | ||
39 | //~ $upload = array( | ||
40 | //~ 'name' => $_FILES['upload']['name'], | ||
41 | //~ 'type' => $_FILES['upload']['type'], | ||
42 | //~ 'tmp_name' => $_FILES['upload']['tmp_name'], | ||
43 | //~ 'error' => $_FILES['upload']['error'], | ||
44 | //~ 'size' => $_FILES['upload']['size'] | ||
45 | //~ ); | ||
46 | // print_r sert à "afficher" un tableau, | ||
47 | // le 2ème paramètre 'true' permet de produire une simple chaine au lieu d'un affichage HTML | ||
48 | // $tableau = print_r($_FILES, true); | ||
49 | // $nom_fichier = "POST_AJAX.log"; | ||
50 | // $fichier = fopen('data/' . $page . '/images/' . $nom_fichier, 'w'); | ||
51 | // // w peut créer un fichier, si il existe déjà, il est effacé par le nouveau contenu | ||
52 | // fputs($fichier, $tableau); | ||
53 | // fclose($fichier); | ||
54 | // chmod('data/' . $page . '/images/' . $nom_fichier, 0666); | ||
55 | |||
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; | ||