false, 'error' => $message ], $httpCode); } // Vérifier la méthode HTTP if ($_SERVER['REQUEST_METHOD'] !== 'GET') { sendError('Méthode non autorisée. Utilisez GET.', 405); } // Initialiser la session try { $sessionId = SessionManager::init(); Config::log("Preview API - Session : {$sessionId}"); } catch (Exception $e) { sendError('Erreur initialisation session : ' . $e->getMessage(), 500); } // Vérifier les paramètres if (!isset($_GET['side']) || !in_array($_GET['side'], ['left', 'right'])) { sendError('Paramètre "side" manquant ou invalide. Valeurs acceptées : "left", "right".'); } if (!isset($_GET['path']) || empty($_GET['path'])) { sendError('Paramètre "path" manquant. Spécifiez le chemin du fichier dans le ZIP.'); } $side = $_GET['side']; $filePath = $_GET['path']; $maxLength = isset($_GET['max_length']) ? (int)$_GET['max_length'] : 10000; // Limiter la longueur max pour éviter surcharge $maxLength = min($maxLength, 50000); // Max 50 KB // Sanitize le chemin $filePath = Config::sanitizePath($filePath); Config::log("Prévisualisation demandée : {$filePath} depuis {$side} (max: {$maxLength} octets)"); $uploadDir = SessionManager::getUploadDir($sessionId); $zipPath = $uploadDir . $side . '.zip'; // Vérifier que le ZIP existe if (!file_exists($zipPath)) { sendError("ZIP '{$side}' non uploadé.", 404); } // Prévisualiser le fichier $zipHandler = new ZipHandler(); try { $content = $zipHandler->previewFile($zipPath, $filePath, $maxLength); if ($content === null) { throw new Exception("Fichier introuvable dans le ZIP"); } // Déterminer si c'est un fichier binaire $isBinary = strpos($content, '[Fichier binaire - prévisualisation impossible]') === 0; // Déterminer si le contenu a été tronqué $truncated = strpos($content, '... (tronqué)') !== false; // Mettre à jour le timestamp SessionManager::updateAccess($sessionId); Config::log("Prévisualisation envoyée : " . strlen($content) . " caractères"); sendResponse([ 'success' => true, 'file_path' => $filePath, 'side' => $side, 'content' => $content, 'is_binary' => $isBinary, 'truncated' => $truncated, 'content_length' => strlen($content) ]); } catch (Exception $e) { sendError('Erreur lors de la prévisualisation : ' . $e->getMessage(), 500); }