'8_Договор_на_оказание_услуг_391587.pdf', 391589 => '9_Подтверждение_оплаты_по_договору_391589.pdf', 391591 => '10_1_Скрин_личного_кабинета_Истца_и_программа_обуч_391591.pdf', 391593 => '7_заявление_потребителя_391593.pdf', 392332 => '11_Доказательство_соблюдения_претензионного_порядк_392332.pdf', 392472 => '11.1_Доказательство_соблюдения_претензионного_поря_392472.pdf', 392475 => '11.2_Доказательство_соблюдения_претензионного_поря_392475.pdf', 395136 => '6_Расчет_иска_Чужба_395136.pdf', 395157 => '0_Исковое_заявление_по_делу_Чужба_ЧОУ_ДПО_ОБРАЗОВА_395157.pdf', 395744 => '12.1_Доказательство_оплаты_направления_иска_ответч_395744.pdf', ]; echo "=== ВОССТАНОВЛЕНИЕ ФАЙЛОВ ПРОЕКТА {$projectId} ===\n"; echo str_repeat("=", 80) . "\n\n"; try { $s3Client = new \Aws\S3\S3Client([ 'version' => 'latest', 'region' => $config['s3']['region'], 'endpoint' => $config['s3']['endpoint'], 'use_path_style_endpoint' => true, 'credentials' => [ 'key' => $config['s3']['key'], 'secret' => $config['s3']['secret'], ], 'suppress_php_deprecation_warning' => true ]); $stats = [ 'total' => count($documents), 'restored' => 0, 'not_found' => 0, 'already_exists' => 0, ]; foreach ($documents as $docId => $filename) { $s3Key = $projectPrefix . $filename; echo "Документ ID: {$docId}\n"; echo " Файл: {$filename}\n"; // Проверяем, существует ли файл if ($s3Client->doesObjectExist($s3Bucket, $s3Key)) { echo " ✅ Файл уже существует\n\n"; $stats['already_exists']++; continue; } // Проверяем наличие версий и delete markers try { $versions = $s3Client->listObjectVersions([ 'Bucket' => $s3Bucket, 'Prefix' => $s3Key, 'MaxKeys' => 10, ]); $deleteMarkers = $versions['DeleteMarkers'] ?? []; $fileVersions = $versions['Versions'] ?? []; if (empty($deleteMarkers) && empty($fileVersions)) { echo " ❌ Файл не найден и нет версий\n\n"; $stats['not_found']++; continue; } // Удаляем delete markers foreach ($deleteMarkers as $marker) { $s3Client->deleteObject([ 'Bucket' => $s3Bucket, 'Key' => $s3Key, 'VersionId' => $marker['VersionId'], ]); echo " ✅ Delete marker удален\n"; } // Если файл все еще не существует, восстанавливаем из версии if (!$s3Client->doesObjectExist($s3Bucket, $s3Key) && !empty($fileVersions)) { $latestVersion = $fileVersions[0]; $s3Client->copyObject([ 'Bucket' => $s3Bucket, 'Key' => $s3Key, 'CopySource' => "{$s3Bucket}/{$s3Key}?versionId={$latestVersion['VersionId']}", ]); echo " ✅ Файл восстановлен из версии\n"; } else { echo " ✅ Файл восстановлен\n"; } $stats['restored']++; sleep(1); } catch (Exception $e) { echo " ❌ Ошибка: " . $e->getMessage() . "\n"; $stats['not_found']++; } echo "\n"; } // Итоги echo str_repeat("=", 80) . "\n"; echo "ИТОГИ:\n"; echo "Всего документов: {$stats['total']}\n"; echo "✅ Восстановлено: {$stats['restored']}\n"; echo "✅ Уже существовало: {$stats['already_exists']}\n"; echo "❌ Не найдено: {$stats['not_found']}\n\n"; echo "=== ГОТОВО ===\n"; } catch (Exception $e) { echo "❌ Критическая ошибка: " . $e->getMessage() . "\n"; exit(1); }