false, 'message' => 'Plik ZIP nie istnieje']); exit; } $zip = new ZipArchive(); if ($zip->open($zipPath) !== true) { echo json_encode(['success' => false, 'message' => 'Nie można otworzyć ZIP']); exit; } $fileList = []; for ($i = 0; $i < $zip->numFiles; $i++) { $fileList[] = $zip->getNameIndex($i); } $zip->close(); // Zapisz listę plików do rozpakowania file_put_contents(TMP_UNZIP_FILE, json_encode([ 'zipfile' => $zipPath, 'files' => $fileList, 'index' => 0 ])); echo json_encode(['success' => true]); exit; } if ($_POST['action'] === 'step') { if (!file_exists(TMP_UNZIP_FILE)) { echo json_encode(['success' => false, 'message' => 'Brak danych tymczasowych']); exit; } $data = json_decode(file_get_contents(TMP_UNZIP_FILE), true); $zipfile = $data['zipfile']; $files = $data['files']; $index = $data['index']; if (!file_exists($zipfile)) { echo json_encode(['success' => false, 'message' => 'ZIP nie istnieje: ' . $zipfile]); exit; } $zip = new ZipArchive(); if ($zip->open($zipfile) !== true) { echo json_encode(['success' => false, 'message' => 'Nie można otworzyć ZIP']); exit; } $end = min($index + UNZIP_STEP_FILES, count($files)); for ($i = $index; $i < $end; $i++) { $entryName = $files[$i]; $targetPath = __DIR__ . '/' . $entryName; if (substr($entryName, -1) === '/') { // Katalog @mkdir($targetPath, 0755, true); } else { $dir = dirname($targetPath); @mkdir($dir, 0755, true); // utwórz katalog, jeśli nie istnieje copy("zip://$zipfile#$entryName", $targetPath); } } $zip->close(); $data['index'] = $end; file_put_contents(TMP_UNZIP_FILE, json_encode($data)); $progress = $end / count($files); echo json_encode([ 'success' => true, 'progress' => round($progress * 100, 2), 'done' => $end >= count($files) ]); exit; } echo json_encode(['success' => false, 'message' => 'Nieznana akcja']); exit; } ?>