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"; }