query($sql); $totalFiles = $adb->num_rows($result); echo "📊 Найдено файлов для переноса: $totalFiles\n\n"; if ($totalFiles == 0) { echo "✅ Все файлы уже в правильной структуре!\n"; exit(0); } // Статистика $stats = [ 'processed' => 0, 'moved' => 0, 'updated' => 0, 'errors' => 0, 'skipped' => 0 ]; // Обрабатываем каждый файл while ($row = $adb->fetch_array($result)) { $stats['processed']++; $notesId = $row['notesid']; $oldFilename = $row['filename']; $projectId = $row['projectid']; $projectName = $row['projectname']; echo "[$stats[processed]/$totalFiles] Проект: $projectName (ID: $projectId)\n"; echo " Старый путь: $oldFilename\n"; // Формируем новый путь $newFilename = "Project/" . $oldFilename; echo " Новый путь: $newFilename\n"; // Формируем S3 ключи $oldS3Key = "crm2/CRM_Active_Files/Documents/" . urldecode($oldFilename); $newS3Key = "crm2/CRM_Active_Files/Documents/" . $newFilename; try { // Проверяем существование исходного файла if (!$s3Client->exists($oldS3Key)) { echo " ⚠️ Исходный файл не найден в S3: $oldS3Key\n"; $stats['skipped']++; continue; } // Проверяем, не существует ли уже новый файл if ($s3Client->exists($newS3Key)) { echo " ⚠️ Целевой файл уже существует: $newS3Key\n"; // Обновляем только БД $updateSql = "UPDATE vtiger_notes SET filename = ? WHERE notesid = ?"; $adb->pquery($updateSql, [$newFilename, $notesId]); $stats['updated']++; echo " ✅ БД обновлена\n\n"; continue; } // Копируем файл в новое место if ($s3Client->copy($oldS3Key, $newS3Key)) { echo " ✅ Файл скопирован в S3\n"; // Удаляем старый файл $s3Client->delete($oldS3Key); echo " ✅ Старый файл удален\n"; // Обновляем путь в базе данных $updateSql = "UPDATE vtiger_notes SET filename = ? WHERE notesid = ?"; $adb->pquery($updateSql, [$newFilename, $notesId]); echo " ✅ БД обновлена\n"; $stats['moved']++; echo " ✅ УСПЕШНО!\n\n"; } else { throw new Exception("Failed to copy file in S3"); } } catch (Exception $e) { echo " ❌ ОШИБКА: " . $e->getMessage() . "\n\n"; $stats['errors']++; } // Небольшая пауза чтобы не нагружать S3 usleep(100000); // 0.1 сек } // Итоговая статистика echo "\n"; echo "==========================================\n"; echo "📊 ИТОГОВАЯ СТАТИСТИКА:\n"; echo "==========================================\n"; echo "Обработано: $stats[processed]\n"; echo "Перенесено: $stats[moved]\n"; echo "Обновлено БД: $stats[updated]\n"; echo "Пропущено: $stats[skipped]\n"; echo "Ошибок: $stats[errors]\n"; echo "\n"; if ($stats['errors'] == 0 && $stats['moved'] + $stats['updated'] == $totalFiles) { echo "✅ ВСЕ ФАЙЛЫ УСПЕШНО ПЕРЕНЕСЕНЫ В ПАПКУ Project/!\n"; } else { echo "⚠️ Есть ошибки или пропущенные файлы. Проверьте логи.\n"; } ?>