prepare('SELECT MIR_Espace FROM MIR_Users WHERE MIR_Email = ? LIMIT 1'); $stmt->execute([$mirEmail]); $ligne = $stmt->fetch(); if ($ligne && $ligne['MIR_Espace']) { return $ligne['MIR_Espace']; } $jeton = bin2hex(random_bytes(8)); // 16 caractères hexadécimaux, aléatoires, jamais dérivés d'un nom $pdoRouter->prepare('UPDATE MIR_Users SET MIR_Espace = ? WHERE MIR_Email = ?') ->execute([$jeton, $mirEmail]); return $jeton; } /** * Résout (et crée si besoin) le dossier physique complet d'un utilisateur. * Retourne le chemin absolu sur le disque du conteneur. */ function resoudreEspaceUtilisateur(PDO $pdoRouter, string $mirEmail, string $host, string $baseNom): string { $dossierRelatif = cheminTenant($host, $baseNom) . '/' . jetonUtilisateur($pdoRouter, $mirEmail); $chemin = RACINE_ESPACES . '/' . $dossierRelatif; if (!is_dir($chemin)) { @mkdir($chemin, 0777, true); @chmod($chemin, 0777); } return $chemin; }