'latest', 'region' => $s3Region, 'endpoint' => $s3Endpoint, 'use_path_style_endpoint' => true, 'credentials' => [ 'key' => $s3AccessKey, 'secret' => $s3SecretKey, ], 'http' => [ 'verify' => false, ] ]); $archivePath = 'backups/storage_full_2025-09-26.tar.gz'; $targetFile = 'storage/2025/August/week5/722fb330f1bcbfa6dc3975013fbf9b4a.docx'; echo "Архив: {$archivePath}\n"; echo "Ищем файл: {$targetFile}\n\n"; // Создаем временную папку для работы $tempDir = '/tmp/extract_' . uniqid(); mkdir($tempDir, 0755, true); echo "Временная папка: {$tempDir}\n"; try { // Скачиваем архив $archiveFile = $tempDir . '/storage_full_2025-09-26.tar.gz'; echo "Скачиваем архив...\n"; $s3Client->getObject([ 'Bucket' => $s3Bucket, 'Key' => $archivePath, 'SaveAs' => $archiveFile ]); echo "✅ Архив скачан: {$archiveFile}\n"; echo "Размер архива: " . filesize($archiveFile) . " байт\n\n"; // Проверяем содержимое архива без распаковки echo "Проверяем содержимое архива...\n"; $listCommand = "tar -tzf " . escapeshellarg($archiveFile) . " | grep " . escapeshellarg($targetFile); $listOutput = shell_exec($listCommand); if (!empty($listOutput)) { echo "✅ Файл найден в архиве:\n"; echo trim($listOutput) . "\n\n"; // Извлекаем только нужный файл echo "Извлекаем файл...\n"; $extractCommand = "cd " . escapeshellarg($tempDir) . " && tar -xzf " . escapeshellarg($archiveFile) . " " . escapeshellarg($targetFile); $extractResult = shell_exec($extractCommand . " 2>&1"); $extractedFile = $tempDir . '/' . $targetFile; if (file_exists($extractedFile)) { echo "✅ Файл извлечен: {$extractedFile}\n"; echo "Размер: " . filesize($extractedFile) . " байт\n\n"; // Восстанавливаем в локальное хранилище echo "Восстанавливаем в локальное хранилище...\n"; $restorePath = "/var/www/fastuser/data/www/crm.clientright.ru/storage/2025/August/week5/"; if (!is_dir($restorePath)) { mkdir($restorePath, 0755, true); echo "Создана папка: {$restorePath}\n"; } $finalPath = $restorePath . '722fb330f1bcbfa6dc3975013fbf9b4a.docx'; copy($extractedFile, $finalPath); echo "✅ Файл восстановлен: {$finalPath}\n"; echo "Размер: " . filesize($finalPath) . " байт\n\n"; // Обновляем БД echo "Обновляем базу данных...\n"; include_once 'config.inc.php'; $mysqli = new mysqli($dbconfig['db_server'], $dbconfig['db_username'], $dbconfig['db_password'], $dbconfig['db_name']); if ($mysqli->connect_error) { echo "❌ Ошибка подключения к БД: " . $mysqli->connect_error . "\n"; } else { $stmt = $mysqli->prepare("UPDATE vtiger_attachments SET path = ? WHERE attachmentsid = 391075"); $stmt->bind_param("s", $restorePath); if ($stmt->execute()) { echo "✅ База данных обновлена\n"; } else { echo "❌ Ошибка обновления БД: " . $stmt->error . "\n"; } $stmt->close(); $mysqli->close(); } echo "\n🎉 ФАЙЛ 391075 УСПЕШНО ВОССТАНОВЛЕН ИЗ АРХИВА!\n"; echo "Теперь файл доступен по ссылке: https://crm.clientright.ru/index.php?module=ModComments&action=DownloadFile&record=391074&fileid=391075\n"; } else { echo "❌ Файл не извлечен. Вывод команды:\n"; echo $extractResult . "\n"; } } else { echo "❌ Файл не найден в архиве\n"; echo "Проверим какие файлы августа есть в архиве...\n"; $augustListCommand = "tar -tzf " . escapeshellarg($archiveFile) . " | grep '2025/August' | head -10"; $augustListOutput = shell_exec($augustListCommand); if (!empty($augustListOutput)) { echo "Файлы августа 2025 в архиве:\n"; echo $augustListOutput . "\n"; } else { echo "Файлы августа 2025 не найдены в архиве\n"; } } } catch (Exception $e) { echo "❌ Ошибка: " . $e->getMessage() . "\n"; } finally { // Очищаем временные файлы echo "\nОчищаем временные файлы...\n"; if (is_dir($tempDir)) { shell_exec("rm -rf " . escapeshellarg($tempDir)); echo "✅ Временные файлы удалены\n"; } } echo "\n=== Готово ===\n"; ?>