'latest', 'region' => $s3Region, 'endpoint' => $s3Endpoint, 'use_path_style_endpoint' => true, 'credentials' => [ 'key' => $s3AccessKey, 'secret' => $s3SecretKey, ], 'http' => [ 'verify' => false, ] ]); // Данные файла из БД $fileName = '722fb330f1bcbfa6dc3975013fbf9b4a.docx'; $originalPath = 'storage/2025/August/week5/'; echo "Ищем файл: {$fileName}\n"; echo "Оригинальный путь: {$originalPath}\n"; echo "S3 Bucket: {$s3Bucket}\n\n"; // Возможные пути в архиве $possiblePaths = [ "backups/{$originalPath}{$fileName}", "backups/storage/2025/August/week5/{$fileName}", "backups/{$fileName}", "storage/2025/August/week5/{$fileName}", "{$fileName}", "archive/{$originalPath}{$fileName}", "archive/storage/2025/August/week5/{$fileName}", ]; echo "Проверяем возможные пути:\n"; foreach ($possiblePaths as $path) { echo "Проверяем: {$path}\n"; try { // Проверяем существование файла $result = $s3Client->headObject([ 'Bucket' => $s3Bucket, 'Key' => $path ]); echo " ✅ ФАЙЛ НАЙДЕН!\n"; echo " Размер: " . $result['ContentLength'] . " байт\n"; echo " Тип: " . ($result['ContentType'] ?? 'unknown') . "\n\n"; // Скачиваем файл echo "Скачиваем файл...\n"; $tempFile = '/tmp/restored_' . $fileName; $s3Client->getObject([ 'Bucket' => $s3Bucket, 'Key' => $path, 'SaveAs' => $tempFile ]); echo " ✅ Файл скачан: {$tempFile}\n"; echo " Размер: " . filesize($tempFile) . " байт\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 . $fileName; copy($tempFile, $finalPath); unlink($tempFile); echo " ✅ Файл восстановлен: {$finalPath}\n"; echo " Размер: " . filesize($finalPath) . " байт\n"; // Обновляем БД echo "\nОбновляем базу данных...\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"; exit(0); } catch (AwsException $e) { if ($e->getAwsErrorCode() === 'NotFound') { echo " ❌ Файл не найден\n"; } else { echo " ❌ Ошибка AWS: " . $e->getAwsErrorCode() . " - " . $e->getMessage() . "\n"; } } catch (Exception $e) { echo " ❌ Ошибка: " . $e->getMessage() . "\n"; } echo "\n"; } echo "❌ Файл не найден ни по одному из путей\n"; echo "\nПопробуем поискать все файлы в папке backups...\n"; try { $result = $s3Client->listObjectsV2([ 'Bucket' => $s3Bucket, 'Prefix' => 'backups/', 'MaxKeys' => 1000 ]); if (isset($result['Contents'])) { echo "Найдено " . count($result['Contents']) . " файлов в папке backups:\n"; $foundFiles = []; foreach ($result['Contents'] as $object) { $key = $object['Key']; if (strpos($key, '722fb330f1bcbfa6dc3975013fbf9b4a') !== false) { $foundFiles[] = $key; } } if (!empty($foundFiles)) { echo "\n✅ НАЙДЕНЫ ФАЙЛЫ С ИМЕНЕМ 722fb330f1bcbfa6dc3975013fbf9b4a:\n"; foreach ($foundFiles as $foundFile) { echo " - {$foundFile}\n"; } // Пробуем восстановить первый найденный $firstFile = $foundFiles[0]; echo "\nВосстанавливаем: {$firstFile}\n"; $tempFile = '/tmp/restored_' . $fileName; $s3Client->getObject([ 'Bucket' => $s3Bucket, 'Key' => $firstFile, 'SaveAs' => $tempFile ]); $restorePath = "/var/www/fastuser/data/www/crm.clientright.ru/storage/2025/August/week5/"; if (!is_dir($restorePath)) { mkdir($restorePath, 0755, true); } $finalPath = $restorePath . $fileName; copy($tempFile, $finalPath); unlink($tempFile); echo "✅ Файл восстановлен: {$finalPath}\n"; // Обновляем БД include_once 'config.inc.php'; $mysqli = new mysqli($dbconfig['db_server'], $dbconfig['db_username'], $dbconfig['db_password'], $dbconfig['db_name']); $stmt = $mysqli->prepare("UPDATE vtiger_attachments SET path = ? WHERE attachmentsid = 391075"); $stmt->bind_param("s", $restorePath); $stmt->execute(); $stmt->close(); $mysqli->close(); echo "🎉 ФАЙЛ 391075 ВОССТАНОВЛЕН!\n"; exit(0); } else { echo "❌ Файлы с именем 722fb330f1bcbfa6dc3975013fbf9b4a не найдены в архиве\n"; } } else { echo "❌ Папка backups пуста или недоступна\n"; } } catch (Exception $e) { echo "❌ Ошибка поиска в архиве: " . $e->getMessage() . "\n"; } echo "\nПроверьте архивы вручную или обратитесь к администратору\n"; ?>