Dofus
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
<?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
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user