Files
2026-07-02 15:13:54 +02:00

69 lines
2.9 KiB
PHP

<?php
// Fonction utilitaire de validation/lecture d'un PDF envoyé par formulaire (drag & drop ou clic)
// Utilisée par les scripts d'ajout/modification de projets, expériences et écoles
// Taille max acceptée par l'application : à ajuster avec upload_max_filesize / post_max_size
// (php.ini) et max_allowed_packet (MySQL) si besoin d'accepter des PDF plus lourds
define('PDF_MAX_SIZE', 15 * 1024 * 1024); // 15 Mo
// Détecte le cas où le fichier envoyé dépasse post_max_size (php.ini)
// Dans ce cas PHP vide $_POST et $_FILES AVANT même d'exécuter le script : sans cette
// détection, le formulaire échoue silencieusement (aucun champ, aucune erreur visible)
function postDepasseLimite() {
$contentLength = isset($_SERVER['CONTENT_LENGTH']) ? (int) $_SERVER['CONTENT_LENGTH'] : 0;
return $_SERVER['REQUEST_METHOD'] === 'POST' && $contentLength > 0 && empty($_POST) && empty($_FILES);
}
// Message d'erreur explicite à afficher quand postDepasseLimite() est vrai
function messageDepassementPost() {
return "Le fichier envoyé est trop volumineux pour le serveur (limite actuelle : "
. ini_get('post_max_size') . "). Réduis la taille du PDF, ou augmente "
. "post_max_size et upload_max_filesize côté serveur.";
}
// Vérifie et lit un fichier PDF envoyé en upload ($_FILES)
// Retourne :
// - null si aucun fichier n'a été envoyé (ce n'est pas une erreur)
// - une chaîne de texte si le fichier est invalide (message d'erreur à afficher)
// - ['filename' => ..., 'data' => ...] si le PDF est valide
function lireUploadPdf($champ = 'pdf') {
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 du PDF (code " . $_FILES[$champ]['error'] . ").";
}
if ($_FILES[$champ]['size'] > PDF_MAX_SIZE) {
return "Le PDF dépasse la taille maximale autorisée (15 Mo).";
}
// Vérification de l'extension
$extension = strtolower(pathinfo($_FILES[$champ]['name'], PATHINFO_EXTENSION));
if ($extension !== 'pdf') {
return "Le fichier doit être un PDF (extension .pdf).";
}
// Vérification du type réel du fichier (pas seulement l'extension, pour éviter
// qu'un fichier malveillant renommé en .pdf soit accepté)
// (pas de finfo_close : déprécié depuis PHP 8.5, la ressource se libère toute seule)
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES[$champ]['tmp_name']);
if ($mime !== 'application/pdf') {
return "Le fichier envoyé n'est pas un PDF valide.";
}
$contenu = file_get_contents($_FILES[$champ]['tmp_name']);
if ($contenu === false) {
return "Impossible de lire le fichier envoyé.";
}
return [
'filename' => basename($_FILES[$champ]['name']),
'data' => $contenu
];
}