1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
<?php
// src/integration/ckeditor5/image_upload.php
declare(strict_types=1);
// le "simple upload adapter" envoie un POST appelé: $_FILES['upload']
// en retour il attend impérativement des données au format JSON du genre: {"url": "data/page/images/monfichier.jpg"}
// cette adresse doit permettre à l'éditeur de télécharger l'image afficher de manière normale: <img scr="data/page/images/monfichier.jpg">
$erreur = '';
if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['upload'])
&& strpos($_SERVER['CONTENT_TYPE'], 'multipart/form-data') !== false) // le "simple upload adapter" envoie des "form-data"
{
if($_FILES['upload']['error'] == 0) // 0 signifie ok
{
if($_FILES['upload']['size'] <= $this->php_ini_max_size)
{
$infos = pathinfo ($_FILES['upload']['name']);
$extension = $infos['extension'];
$extautorisées = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'tiff'];
// on prend la même liste que celle côté javascript, le SVG est bloqué pour raison de sécurité (javascript à l'intérieur)
if(in_array($extension, $extautorisées))
{
move_uploaded_file ($_FILES['upload']['tmp_name'], self::DATA_PATH . '/images/' . $_FILES['upload']['name']);
chmod(self::DATA_PATH . '/images/' . $_FILES['upload']['name'], 0666);
}
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é';
}
}
else
{
$erreur = 'fichier trop lourd';
}
}
else
{
$erreur = $_FILES['upload']['error'];
}
if(empty($erreur))
{
$chemin = '{"url": "' . self::DATA_PATH . '/images/' . $_FILES['upload']['name'] . '"}';
echo $chemin;
}
else
{
echo $erreur;
}
}
else
{
echo "erreur: téléchargement non identifié";
}
/* les erreurs retournées avec $_FILES['upload']['error']:
0 pas d'erreur
1 taille du fichier supérieure à la valeur de upload_max_filesize dans le fichier php.ini (par défaut = 2 MO)
2 taille du fichier supérieure à la valeur de MAX_FILE_SIZE dans le formulaire HTML
3 fichier partiellement téléchargé
4 pas de fichier du tout
6 pas de dossier temporaire pour mettre le fichier
7 echec de l'écriture sur le DD
8 envoi arrêté par une extension de PHP mais on ne nous dit pas pourquoi => diagnostic avec la fonction phpinfo() */
|