'; $startTime = microtime(true); $ch = curl_init($webdavUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PROPFIND'); curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlRequest); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Depth: 1', 'Content-Type: application/xml' ]); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 30); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $totalTime = curl_getinfo($ch, CURLOPT_TOTAL_TIME); $connectTime = curl_getinfo($ch, CURLINFO_CONNECT_TIME); $sizeDownload = curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD); curl_close($ch); $endTime = microtime(true); $duration = ($endTime - $startTime) * 1000; // в миллисекундах echo " ⏱️ Время выполнения: " . round($duration, 2) . " мс\n"; echo " 📊 HTTP код: $httpCode\n"; echo " 📦 Размер ответа: " . round($sizeDownload / 1024, 2) . " KB\n"; echo " 🔌 Время подключения: " . round($connectTime * 1000, 2) . " мс\n"; if ($httpCode == 207) { // Парсим XML ответ $xml = simplexml_load_string($response); if ($xml) { $namespaces = $xml->getNamespaces(true); $count = 0; foreach ($xml->xpath('//d:response') as $response) { $count++; } echo " 📁 Найдено элементов: $count\n"; if ($duration > 5000) { echo "\n ⚠️ ВНИМАНИЕ: Запрос выполняется более 5 секунд!\n"; echo " Это может быть причиной медленной загрузки.\n"; } else if ($duration > 2000) { echo "\n ⚠️ Запрос выполняется более 2 секунд - можно оптимизировать\n"; } else { echo "\n ✅ Скорость нормальная\n"; } } } else { echo " ❌ Ошибка запроса (HTTP $httpCode)\n"; if ($response) { echo " Ответ: " . substr($response, 0, 200) . "\n"; } } // 3. Проверка Redis индекса echo "\n3️⃣ ПРОВЕРКА REDIS ИНДЕКСА\n"; echo "────────────────────────────────────────────────────────────────────────────\n"; try { $redis = new Redis(); $redis->connect('147.45.146.17', 6379); $redis->auth('CRM_Redis_Pass_2025_Secure!'); // Проверяем наличие индекса для тестового пути $testRedisKey = 'crm:nc:fileid:' . $testPath; $indexed = $redis->exists($testRedisKey); if ($indexed) { echo " ✅ Путь проиндексирован в Redis\n"; $data = json_decode($redis->get($testRedisKey), true); if ($data) { echo " fileId: {$data['fileId']}\n"; } } else { echo " ⚠️ Путь НЕ проиндексирован в Redis\n"; echo " Это может замедлять загрузку\n"; } // Проверяем количество записей в индексе $keys = $redis->keys('crm:nc:fileid:' . $testPath . '*'); echo " 📊 Записей для Project: " . count($keys) . "\n"; } catch (Exception $e) { echo " ❌ Ошибка подключения к Redis: " . $e->getMessage() . "\n"; } // 4. Рекомендации echo "\n4️⃣ РЕКОМЕНДАЦИИ\n"; echo "────────────────────────────────────────────────────────────────────────────\n"; if ($duration > 2000) { echo " 💡 ПРОБЛЕМА: Медленные PROPFIND запросы\n\n"; echo " Решения:\n"; echo " 1. Использовать Redis индекс для получения fileId\n"; echo " 2. Кешировать результаты PROPFIND запросов\n"; echo " 3. Использовать прямой доступ к S3 вместо Nextcloud для просмотра\n"; echo " 4. Оптимизировать настройки Nextcloud external storage\n"; } else { echo " ✅ Производительность в норме\n"; echo " 💡 Если все равно медленно, проблема может быть в:\n"; echo " - Количестве файлов в папке\n"; echo " - Размере XML ответа\n"; echo " - Задержке сети до S3\n"; } echo "\n=== Проверка завершена ===\n";