105 lines
4.5 KiB
PHP
105 lines
4.5 KiB
PHP
<?php
|
||
/**
|
||
* Проверка зависимостей для битых файлов
|
||
*/
|
||
|
||
require_once '/var/www/fastuser/data/www/crm.clientright.ru/config.inc.php';
|
||
$mysqli = new mysqli($dbconfig['db_server'], $dbconfig['db_username'], $dbconfig['db_password'], $dbconfig['db_name']);
|
||
if ($mysqli->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();
|
||
?>
|