Organisation des fichiers uploadés
Tous les fichiers téléversés sont stockés dans le dossier uploads/, protégé par un fichier .htaccess qui bloque l'exécution de PHP. Les fichiers peuvent être organisés en sous-dossiers que vous créez depuis la bibliothèque médias du back-office. L'arborescence est arbitraire et reflète votre organisation éditoriale.
Formats supportés
Images
- JPEG (
.jpg,.jpeg) - PNG (
.png) - WebP (
.webp) - GIF (
.gif) - SVG (
.svg) — avec sanitisation obligatoire
Vidéos
- MP4 (
.mp4), WebM (.webm), OGV (.ogv), M4V (.m4v)
Vérification MIME et limites de taille
L'extension de fichier seule ne suffit pas pour valider un upload. QuietCMS utilise finfo_open(FILEINFO_MIME_TYPE) pour lire la signature binaire réelle du fichier, indépendamment du nom fourni par le client :
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $tmpPath);
finfo_close($finfo);
if (!in_array($mime, $allowedMimes)) {
throw new \RuntimeException('Type MIME non autorisé : ' . $mime);
}
Les limites de taille par défaut sont :
- Images — 10 Mo (limité par
upload_max_filesizeetpost_max_sizedansphp.ini) - Vidéos — 500 Mo (nécessite d'augmenter les directives PHP et éventuellement le timeout)
Sanitisation du nom de fichier
Le nom d'origine fourni par le navigateur n'est jamais conservé. QuietCMS génère un nom unique combinant un slug ASCII et un timestamp :
// Nom original : "Mon Image (2).PNG"
// Nom stocké : "mon-image-1716292800.webp"
Cette stratégie élimine les risques liés aux noms de fichiers contenant des caractères spéciaux ou des séquences de traversal (../).
Conversion WebP automatique
À l'upload, les images JPEG et PNG sont automatiquement converties en WebP par la classe ImageService, qui utilise l'extension PHP GD ou Imagick (selon disponibilité) :
// Dans ImageService::convert()
$image = imagecreatefromjpeg($sourcePath);
imagewebp($image, $destPath, 82); // qualité 82 par défaut
imagedestroy($image);
Le WebP offre en moyenne 25-35 % de gain de poids par rapport au JPEG à qualité visuelle équivalente. Le fichier original est supprimé après conversion réussie.
Sanitisation des SVG
Les fichiers SVG peuvent contenir du JavaScript malveillant ou des balises <foreignObject> exploitables. QuietCMS parse le SVG uploadé avec DOMDocument et retire toute balise ou attribut dangereux avant de l'enregistrer sur le disque :
$dom = new \DOMDocument();
$dom->loadXML($svgContent, LIBXML_NONET);
// Suppression des <script>, <foreignObject>, attributs on*
SvgSanitizer::clean($dom);
$safeSvg = $dom->saveXML();
Alt text et gestion des métadonnées
Chaque fichier média dispose d'un champ alt text éditable depuis la bibliothèque. Ce texte est inséré dans la balise <img alt="..."> lorsque vous sélectionnez l'image depuis l'éditeur. Les métadonnées (alt, titre, dossier) sont stockées dans uploads/media.json.
Thumbnails
La classe ThumbHelper génère des vignettes à la volée (ou en cache) pour l'affichage dans la bibliothèque et les listes d'articles. Les dimensions sont configurables dans les paramètres du thème actif.
Articles similaires
Constructeur de formulaires et système de commentaires
Créez des formulaires personnalisés et gérez les commentaires de vos lecteurs avec QuietCMS.
Gestion des pages et articles dans QuietCMS
Comment créer et gérer des pages statiques et des articles de blog dans QuietCMS avec le back-office.
La bibliothèque de classes core/ de QuietCMS
Tour d'horizon des 20 classes PHP de la bibliothèque core/ de QuietCMS et leurs responsabilités.