connect_error) { die("Connection failed: " . $mysqli->connect_error); } $mysqli->set_charset("utf8"); echo "=== ПРОВЕРКА ЗАВИСИМОСТЕЙ БИТЫХ ФАЙЛОВ ===\n\n"; // Получаем список всех битых файлов $brokenQuery = "SELECT notesid FROM vtiger_notes WHERE filelocationtype = 'I' AND (s3_key IS NULL OR s3_key = '')"; $brokenResult = $mysqli->query($brokenQuery); $brokenIds = []; while ($row = $brokenResult->fetch_assoc()) { $brokenIds[] = $row['notesid']; } echo "Всего битых файлов: " . count($brokenIds) . "\n\n"; if (count($brokenIds) == 0) { echo "Нет битых файлов для проверки.\n"; exit; } // Проверяем vtiger_attachments echo "Проверяем vtiger_attachments...\n"; $attachmentQuery = "SELECT COUNT(*) as count FROM vtiger_attachments WHERE notesid IN (" . implode(',', $brokenIds) . ")"; $attachmentResult = $mysqli->query($attachmentQuery); $attachmentCount = $attachmentResult->fetch_assoc()['count']; echo " Записи в vtiger_attachments: $attachmentCount\n"; // Проверяем vtiger_crmentity echo "Проверяем vtiger_crmentity...\n"; $crmentityQuery = "SELECT COUNT(*) as count FROM vtiger_crmentity WHERE crmid IN (" . implode(',', $brokenIds) . ")"; $crmentityResult = $mysqli->query($crmentityQuery); $crmentityCount = $crmentityResult->fetch_assoc()['count']; echo " Записи в vtiger_crmentity: $crmentityCount\n"; // Проверяем связи с другими модулями echo "Проверяем vtiger_crmentityrel...\n"; $relationsQuery = "SELECT COUNT(*) as count FROM vtiger_crmentityrel WHERE crmid IN (" . implode(',', $brokenIds) . ")"; $relationsResult = $mysqli->query($relationsQuery); $relationsCount = $relationsResult->fetch_assoc()['count']; echo " Связи в vtiger_crmentityrel: $relationsCount\n"; // Проверяем vtiger_seattachmentsrel echo "Проверяем vtiger_seattachmentsrel...\n"; $seattachmentsQuery = "SELECT COUNT(*) as count FROM vtiger_seattachmentsrel WHERE attachmentsid IN (" . implode(',', $brokenIds) . ")"; $seattachmentsResult = $mysqli->query($seattachmentsQuery); $seattachmentsCount = $seattachmentsResult->fetch_assoc()['count']; echo " Связи в vtiger_seattachmentsrel: $seattachmentsCount\n"; echo "\n"; // Итоговый анализ echo "=== ИТОГОВЫЙ АНАЛИЗ ===\n"; $totalDependencies = $attachmentCount + $crmentityCount + $relationsCount + $seattachmentsCount; if ($totalDependencies == 0) { echo "✅ БЕЗОПАСНО УДАЛЯТЬ: Нет зависимостей в других таблицах\n"; echo " Все " . count($brokenIds) . " битых файлов можно удалить без риска\n"; } else { echo "⚠️ ТРЕБУЕТ ПРОВЕРКИ: $totalDependencies файлов имеют зависимости\n"; echo " Рекомендуется архивировать вместо удаления\n"; } echo "\n"; // Показываем конкретные зависимости if ($attachmentCount > 0) { echo "Детали зависимостей в vtiger_attachments:\n"; $detailQuery = "SELECT notesid, attachmentsid FROM vtiger_attachments WHERE notesid IN (" . implode(',', $brokenIds) . ") LIMIT 10"; $detailResult = $mysqli->query($detailQuery); while ($row = $detailResult->fetch_assoc()) { echo " ID: {$row['notesid']}, Attachment ID: {$row['attachmentsid']}\n"; } if ($attachmentCount > 10) { echo " ... и еще " . ($attachmentCount - 10) . " записей\n"; } echo "\n"; } if ($crmentityCount > 0) { echo "Детали зависимостей в vtiger_crmentity:\n"; $detailQuery = "SELECT crmid, setype FROM vtiger_crmentity WHERE crmid IN (" . implode(',', $brokenIds) . ") LIMIT 10"; $detailResult = $mysqli->query($detailQuery); while ($row = $detailResult->fetch_assoc()) { echo " ID: {$row['crmid']}, Type: {$row['setype']}\n"; } if ($crmentityCount > 10) { echo " ... и еще " . ($crmentityCount - 10) . " записей\n"; } echo "\n"; } $mysqli->close(); ?>