150 lines
4.4 KiB
PHP
150 lines
4.4 KiB
PHP
|
|
<?php
|
|||
|
|
require_once '/var/www/fastuser/data/www/crm.clientright.ru/config.inc.php';
|
|||
|
|
|
|||
|
|
$pdo = new PDO(
|
|||
|
|
"mysql:host={$dbconfig['db_server']};port=3306;dbname={$dbconfig['db_name']};charset=utf8",
|
|||
|
|
$dbconfig['db_username'],
|
|||
|
|
$dbconfig['db_password'],
|
|||
|
|
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$projectId = 371231;
|
|||
|
|
|
|||
|
|
// Получаем информацию о проекте
|
|||
|
|
$sqlProject = "SELECT projectid, projectname, projectstatus FROM vtiger_project WHERE projectid = ?";
|
|||
|
|
$stmtProject = $pdo->prepare($sqlProject);
|
|||
|
|
$stmtProject->execute([$projectId]);
|
|||
|
|
$project = $stmtProject->fetch(PDO::FETCH_ASSOC);
|
|||
|
|
|
|||
|
|
if (!$project) {
|
|||
|
|
die("❌ Проект $projectId не найден!\n");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
echo "📋 ПРОЕКТ: {$project['projectname']}\n";
|
|||
|
|
echo " ID: {$project['projectid']}\n";
|
|||
|
|
echo " Статус: {$project['projectstatus']}\n";
|
|||
|
|
echo "\n" . str_repeat("=", 80) . "\n\n";
|
|||
|
|
|
|||
|
|
// Получаем документы проекта
|
|||
|
|
$sql = "SELECT
|
|||
|
|
n.notesid,
|
|||
|
|
n.title,
|
|||
|
|
n.filename,
|
|||
|
|
n.filelocationtype,
|
|||
|
|
n.foldername,
|
|||
|
|
n.s3_bucket,
|
|||
|
|
n.s3_key,
|
|||
|
|
n.nc_path,
|
|||
|
|
n.filesize,
|
|||
|
|
e.createdtime,
|
|||
|
|
e.modifiedtime,
|
|||
|
|
u.user_name,
|
|||
|
|
e.deleted
|
|||
|
|
FROM vtiger_notes n
|
|||
|
|
INNER JOIN vtiger_crmentity e ON e.crmid = n.notesid
|
|||
|
|
INNER JOIN vtiger_senotesrel snr ON snr.notesid = n.notesid
|
|||
|
|
LEFT JOIN vtiger_users u ON u.id = e.smownerid
|
|||
|
|
WHERE snr.crmid = ? AND e.deleted = 0
|
|||
|
|
ORDER BY e.createdtime DESC";
|
|||
|
|
|
|||
|
|
$stmt = $pdo->prepare($sql);
|
|||
|
|
$stmt->execute([$projectId]);
|
|||
|
|
$documents = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|||
|
|
|
|||
|
|
$count = count($documents);
|
|||
|
|
echo "📄 НАЙДЕНО ДОКУМЕНТОВ: $count\n\n";
|
|||
|
|
|
|||
|
|
if ($count == 0) {
|
|||
|
|
echo "⚠️ Документы не найдены!\n";
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$totalSize = 0;
|
|||
|
|
$s3Count = 0;
|
|||
|
|
$localCount = 0;
|
|||
|
|
$brokenCount = 0;
|
|||
|
|
$accessibleCount = 0;
|
|||
|
|
$notAccessibleCount = 0;
|
|||
|
|
|
|||
|
|
foreach ($documents as $i => $doc) {
|
|||
|
|
$num = $i + 1;
|
|||
|
|
$filelocationtype = $doc['filelocationtype'] ?? 'I';
|
|||
|
|
$s3Bucket = $doc['s3_bucket'] ?? null;
|
|||
|
|
$s3Key = $doc['s3_key'] ?? null;
|
|||
|
|
$filename = $doc['filename'] ?? '';
|
|||
|
|
$title = $doc['title'] ?? 'Без названия';
|
|||
|
|
|
|||
|
|
$isS3 = ($filelocationtype == 'E' && !empty($s3Bucket) && !empty($s3Key));
|
|||
|
|
$isLocal = ($filelocationtype == 'I' || empty($filelocationtype));
|
|||
|
|
|
|||
|
|
if ($isS3) {
|
|||
|
|
$s3Count++;
|
|||
|
|
$status = "☁️ S3";
|
|||
|
|
$filePath = "s3://{$s3Bucket}/{$s3Key}";
|
|||
|
|
$accessibleCount++; // Пока считаем доступными, проверим отдельно
|
|||
|
|
|
|||
|
|
} else {
|
|||
|
|
$localCount++;
|
|||
|
|
$status = "💾 Локальный";
|
|||
|
|
|
|||
|
|
// Для локальных файлов проверяем путь
|
|||
|
|
if (!empty($filename)) {
|
|||
|
|
// Парсим путь из filename
|
|||
|
|
$filePath = $filename;
|
|||
|
|
if (file_exists($filePath)) {
|
|||
|
|
$accessibleCount++;
|
|||
|
|
$status .= " ✅";
|
|||
|
|
} else {
|
|||
|
|
$notAccessibleCount++;
|
|||
|
|
$brokenCount++;
|
|||
|
|
$status .= " ❌ ФАЙЛ НЕ НАЙДЕН";
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$notAccessibleCount++;
|
|||
|
|
$brokenCount++;
|
|||
|
|
$status .= " ❌ НЕТ ПУТИ";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$size = $doc['filesize'] ?? 0;
|
|||
|
|
$totalSize += $size;
|
|||
|
|
$sizeStr = $size > 0 ? number_format($size / 1024, 2) . ' KB' : '0 KB';
|
|||
|
|
|
|||
|
|
echo sprintf(
|
|||
|
|
"%3d. [%s] %s\n",
|
|||
|
|
$num,
|
|||
|
|
$status,
|
|||
|
|
$title
|
|||
|
|
);
|
|||
|
|
echo sprintf(
|
|||
|
|
" ID: %d | Размер: %s | Тип: %s\n",
|
|||
|
|
$doc['notesid'],
|
|||
|
|
$sizeStr,
|
|||
|
|
$filelocationtype
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
if ($isS3) {
|
|||
|
|
echo sprintf(" S3 Key: %s\n", $s3Key);
|
|||
|
|
} else {
|
|||
|
|
echo sprintf(" Путь: %s\n", substr($filename, 0, 100));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($notAccessibleCount > 0 && ($i == $count - 1 || ($i + 1) % 10 == 0)) {
|
|||
|
|
echo "\n";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
echo "\n" . str_repeat("=", 80) . "\n";
|
|||
|
|
echo "📊 СТАТИСТИКА:\n";
|
|||
|
|
echo " Всего документов: $count\n";
|
|||
|
|
echo " S3 документов: $s3Count\n";
|
|||
|
|
echo " Локальных документов: $localCount\n";
|
|||
|
|
echo " Доступных: $accessibleCount ✅\n";
|
|||
|
|
echo " Недоступных: $notAccessibleCount ❌\n";
|
|||
|
|
echo " Общий размер: " . number_format($totalSize / 1024 / 1024, 2) . " MB\n";
|
|||
|
|
|
|||
|
|
if ($brokenCount > 0) {
|
|||
|
|
echo "\n⚠️ ВНИМАНИЕ: Найдено $brokenCount недоступных файлов!\n";
|
|||
|
|
}
|
|||
|
|
|