From b584d411e423e78e153e5fb1030c929c0e181169 Mon Sep 17 00:00:00 2001 From: Pierre Date: Fri, 2 Oct 2026 14:56:27 +0000 Subject: [PATCH] =?UTF-8?q?Archivage=20:=20verrou=20exclusif=20par=20bo?= =?UTF-8?q?=C3=AEtier,=20chdir=20dans=20cron=5Fquarantaine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cron_archivage.php | 279 +++++++++++++++++++++------------------- cron_quarantaine.php | 196 +++++++++++++++------------- fonctions_archivage.php | 51 ++++++++ 3 files changed, 306 insertions(+), 220 deletions(-) diff --git a/cron_archivage.php b/cron_archivage.php index cbbd82d..20e14b8 100644 --- a/cron_archivage.php +++ b/cron_archivage.php @@ -1,14 +1,17 @@ true, 'poignee'=>resource] ou ['ok'=>false, 'raison'=>string]. +// ---------------------------------------------------------------------------- +function Verrouiller_boitier($adresse_mac) +{ + // Nom de fichier construit uniquement à partir des 12 caractères hexadécimaux de l'adresse + // (quel que soit son format d'écriture, avec ou sans ':') - jamais de chemin arbitraire : + $hex = strtoupper(preg_replace('/[^0-9A-Fa-f]/', '', (string)$adresse_mac)); + if (strlen($hex) !== 12) return ['ok' => false, 'raison' => "adresse MAC invalide pour un verrou"]; + + if (!is_dir(REPERTOIRE_VERROUS) && !@mkdir(REPERTOIRE_VERROUS, 0770, true) && !is_dir(REPERTOIRE_VERROUS)) + { + return ['ok' => false, 'raison' => "répertoire de verrous " . REPERTOIRE_VERROUS . " impossible à créer"]; + } + + // Mode 'c' : crée le fichier s'il n'existe pas, sans jamais le tronquer. + $poignee = @fopen(REPERTOIRE_VERROUS . "/boitier_{$hex}.lock", 'c'); + if ($poignee === false) return ['ok' => false, 'raison' => "fichier de verrou impossible à ouvrir"]; + + if (!flock($poignee, LOCK_EX | LOCK_NB)) + { + fclose($poignee); + return ['ok' => false, 'raison' => "déjà en cours de traitement par un autre processus"]; + } + return ['ok' => true, 'poignee' => $poignee]; +} + +function Liberer_boitier($poignee) +{ + if (!is_resource($poignee)) return; + flock($poignee, LOCK_UN); + fclose($poignee); +} // ---------------------------------------------------------------------------- // Résout l'affectation active d'un boîtier (par adresse MAC) - cf synthèse