'latest', 'region' => $config['s3']['region'], 'endpoint' => $config['s3']['endpoint'], 'use_path_style_endpoint' => true, 'credentials' => [ 'key' => $config['s3']['key'], 'secret' => $config['s3']['secret'], ], 'suppress_php_deprecation_warning' => true ]); // Получаем s3_key из БД 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] ); $stmt = $pdo->prepare('SELECT s3_key, filename FROM vtiger_notes WHERE notesid = ?'); $stmt->execute([$docId]); $doc = $stmt->fetch(PDO::FETCH_ASSOC); if (!$doc) { die("Документ $docId не найден в БД\n"); } $s3Key = $doc['s3_key']; echo "S3 Key из БД: $s3Key\n\n"; // Варианты путей для проверки $variants = [ $s3Key, // Оригинальный путь rawurlencode($s3Key), // URL-encoded str_replace(' ', '_', $s3Key), // Замена пробелов str_replace(' ', '%20', $s3Key), // Пробелы как %20 ]; echo "1. Проверка существования файла по разным вариантам пути:\n"; foreach ($variants as $i => $variant) { echo " Вариант " . ($i + 1) . ": " . substr($variant, 0, 100) . "...\n"; try { $result = $s3Client->headObject([ 'Bucket' => $s3Bucket, 'Key' => $variant ]); echo " ✅ Файл найден! Size: " . $result['ContentLength'] . " bytes\n"; echo " ContentType: " . $result['ContentType'] . "\n"; break; } catch (\Aws\Exception\AwsException $e) { if ($e->getAwsErrorCode() == 'NotFound') { echo " ❌ Не найден\n"; } else { echo " ⚠️ Ошибка: " . $e->getAwsErrorCode() . "\n"; } } } echo "\n"; // Поиск всех файлов в папке проекта echo "2. Поиск всех файлов в папке проекта:\n"; $prefixes = [ "crm2/CRM_Active_Files/Documents/Project/", "crm2/CRM_Active_Files/Documents/", "Documents/Project/", "Documents/", ]; $allFoundFiles = []; foreach ($prefixes as $projectPrefix) { echo " Проверка префикса: $projectPrefix\n"; try { $objects = $s3Client->listObjectsV2([ 'Bucket' => $s3Bucket, 'Prefix' => $projectPrefix, 'MaxKeys' => 1000 ]); if (isset($objects['Contents'])) { foreach ($objects['Contents'] as $object) { $key = $object['Key']; // Ищем файлы, связанные с проектом 371231 или документом 371983 if (strpos($key, (string)$projectId) !== false || strpos($key, '371983') !== false || strpos($key, 'Ломакин') !== false || strpos($key, 'НЕТОЛОГИЯ') !== false) { if (!in_array($key, $allFoundFiles)) { $allFoundFiles[] = $key; } } } } } catch (\Aws\Exception\AwsException $e) { echo " Ошибка при поиске: " . $e->getMessage() . "\n"; } } if (!empty($allFoundFiles)) { echo " Найдено " . count($allFoundFiles) . " файлов:\n"; foreach ($allFoundFiles as $file) { echo " - $file\n"; } } else { echo " Файлы проекта не найдены в S3\n"; } echo "\n"; // Поиск файла по имени (без полного пути) echo "3. Поиск файла по имени и ID документа:\n"; $searchPatterns = [ "11.1_Доказательство_соблюдения_претензионного_поря_371983.pdf", "371983", "11.1", "Доказательство_соблюдения" ]; $foundFiles = []; foreach ($searchPatterns as $pattern) { echo " Поиск по паттерну: $pattern\n"; try { // Ищем в разных префиксах $searchPrefixes = [ "crm2/CRM_Active_Files/", "Documents/", "" ]; foreach ($searchPrefixes as $prefix) { $objects = $s3Client->listObjectsV2([ 'Bucket' => $s3Bucket, 'Prefix' => $prefix, 'MaxKeys' => 5000 ]); if (isset($objects['Contents'])) { foreach ($objects['Contents'] as $object) { $key = $object['Key']; if (stripos($key, $pattern) !== false) { if (!in_array($key, $foundFiles)) { $foundFiles[] = $key; } } } } } } catch (\Aws\Exception\AwsException $e) { echo " Ошибка при поиске: " . $e->getMessage() . "\n"; } } if (!empty($foundFiles)) { echo " Найдено " . count($foundFiles) . " файлов:\n"; foreach ($foundFiles as $file) { echo " - $file\n"; // Проверяем доступность try { $result = $s3Client->headObject([ 'Bucket' => $s3Bucket, 'Key' => $file ]); echo " ✅ Доступен, размер: " . $result['ContentLength'] . " bytes\n"; } catch (\Aws\Exception\AwsException $e) { echo " ❌ Недоступен: " . $e->getAwsErrorCode() . "\n"; } } } else { echo " Файл не найден по имени\n"; } // Проверяем все документы проекта из БД echo "\n4. Проверка всех документов проекта из БД:\n"; $stmt = $pdo->prepare('SELECT n.notesid, n.title, 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 LIMIT 10'); $stmt->execute([$projectId]); $docs = $stmt->fetchAll(PDO::FETCH_ASSOC); echo " Проверка " . count($docs) . " документов:\n"; $foundCount = 0; foreach ($docs as $doc) { $key = $doc['s3_key']; try { $result = $s3Client->headObject([ 'Bucket' => $s3Bucket, 'Key' => $key ]); echo " ✅ ID {$doc['notesid']}: " . substr($doc['title'], 0, 50) . "...\n"; $foundCount++; } catch (\Aws\Exception\AwsException $e) { if ($e->getAwsErrorCode() == 'NotFound') { echo " ❌ ID {$doc['notesid']}: " . substr($doc['title'], 0, 50) . "... (не найден)\n"; } } } echo " Найдено в S3: $foundCount из " . count($docs) . "\n"; } catch (Exception $e) { echo "ОШИБКА: " . $e->getMessage() . "\n"; echo "Trace: " . $e->getTraceAsString() . "\n"; }