PDO::ERRMODE_EXCEPTION] ); $projectId = 371231; // Получаем документы проекта $sql = "SELECT n.notesid, n.title, n.filename, n.filelocationtype, n.s3_bucket, n.s3_key FROM vtiger_notes n INNER JOIN vtiger_crmentity e ON e.crmid = n.notesid INNER JOIN vtiger_senotesrel snr ON snr.notesid = n.notesid WHERE snr.crmid = ? AND e.deleted = 0 AND n.filelocationtype = 'E' ORDER BY n.notesid DESC"; $stmt = $pdo->prepare($sql); $stmt->execute([$projectId]); $documents = $stmt->fetchAll(PDO::FETCH_ASSOC); echo "Проверка доступности S3 файлов для проекта $projectId\n"; echo str_repeat("=", 80) . "\n\n"; // Инициализируем S3 клиент $s3Config = $config['s3']; $awsClient = new \Aws\S3\S3Client([ 'version' => 'latest', 'region' => $s3Config['region'], 'endpoint' => $s3Config['endpoint'], 'credentials' => [ 'key' => $s3Config['key'], 'secret' => $s3Config['secret'], ], 'use_path_style_endpoint' => true, ]); $accessible = 0; $notAccessible = 0; $errors = []; foreach ($documents as $doc) { $notesid = $doc['notesid']; $title = $doc['title']; $s3Bucket = $doc['s3_bucket']; $s3Key = $doc['s3_key']; try { $exists = $awsClient->doesObjectExist($s3Bucket, $s3Key); if ($exists) { $accessible++; echo "✅ ID: $notesid - $title\n"; } else { $notAccessible++; echo "❌ ID: $notesid - $title\n"; echo " S3 Key: $s3Key\n"; $errors[] = [ 'id' => $notesid, 'title' => $title, 's3_key' => $s3Key, 'reason' => 'File does not exist in S3' ]; } } catch (\Aws\Exception\AwsException $e) { $notAccessible++; echo "❌ ID: $notesid - $title\n"; echo " Ошибка: " . $e->getMessage() . "\n"; echo " S3 Key: $s3Key\n"; $errors[] = [ 'id' => $notesid, 'title' => $title, 's3_key' => $s3Key, 'reason' => 'AWS Exception: ' . $e->getMessage() ]; } catch (Exception $e) { $notAccessible++; echo "❌ ID: $notesid - $title\n"; echo " Ошибка: " . $e->getMessage() . "\n"; $errors[] = [ 'id' => $notesid, 'title' => $title, 's3_key' => $s3Key, 'reason' => 'Exception: ' . $e->getMessage() ]; } } echo "\n" . str_repeat("=", 80) . "\n"; echo "СТАТИСТИКА:\n"; echo " Доступных файлов: $accessible\n"; echo " Недоступных файлов: $notAccessible\n"; if (!empty($errors)) { echo "\nНЕДОСТУПНЫЕ ФАЙЛЫ:\n"; foreach ($errors as $error) { echo " - ID {$error['id']}: {$error['title']}\n"; echo " S3 Key: {$error['s3_key']}\n"; echo " Причина: {$error['reason']}\n\n"; } }