..., 'data' => ...] si l'image est valide function lireUploadAvatar($champ = 'avatar') { if (!isset($_FILES[$champ]) || $_FILES[$champ]['error'] === UPLOAD_ERR_NO_FILE) { return null; } if ($_FILES[$champ]['error'] !== UPLOAD_ERR_OK) { return "Erreur lors de l'envoi de l'image (code " . $_FILES[$champ]['error'] . ")."; } if ($_FILES[$champ]['size'] > AVATAR_MAX_SIZE) { return 'La photo dépasse la taille maximale autorisée (3 Mo).'; } // getimagesize() décode réellement l'en-tête de l'image (contrairement à une simple // vérification d'extension) : un fichier renommé en .jpg mais qui n'est pas une vraie // image est rejeté ici, sans avoir besoin de l'extension GD $infos = @getimagesize($_FILES[$champ]['tmp_name']); if ($infos === false) { return "Le fichier envoyé n'est pas une image valide."; } $largeur = $infos[0]; $hauteur = $infos[1]; $mime = $infos['mime']; if (!in_array($mime, AVATAR_MIME_AUTORISES, true)) { return 'Format non supporté : utilise une image JPEG, PNG ou WebP.'; } if ($largeur > AVATAR_MAX_DIMENSION || $hauteur > AVATAR_MAX_DIMENSION) { return 'Image trop grande (maximum ' . AVATAR_MAX_DIMENSION . ' pixels de côté).'; } $contenu = file_get_contents($_FILES[$champ]['tmp_name']); if ($contenu === false) { return "Impossible de lire le fichier envoyé."; } return [ 'mime' => $mime, 'data' => $contenu ]; }