'; $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); $duration = (microtime(true) - $startTime) * 1000; curl_close($ch); echo " ⏱️ Время выполнения: " . round($duration, 2) . " мс\n"; echo " 📊 HTTP код: $httpCode\n"; if ($httpCode == 207) { $xml = simplexml_load_string($response); if ($xml) { $count = 0; foreach ($xml->xpath('//d:response') as $response) { $count++; } echo " 📁 Найдено элементов: $count\n"; } echo " ✅ Это то, что использует n8n - работает быстро!\n"; } else { echo " ⚠️ Ошибка (возможно нужен другой пароль)\n"; } // 2. Что использует веб-интерфейс Nextcloud echo "\n2️⃣ ЧТО ИСПОЛЬЗУЕТ ВЕБ-ИНТЕРФЕЙС (МЕДЛЕННО):\n"; echo "────────────────────────────────────────────────────────────────────────────\n"; echo " Nextcloud веб-интерфейс использует СВОЙ API, не WebDAV!\n\n"; echo " 📋 Возможные endpoints:\n"; echo " 1. /apps/files/ajax/list.php - список файлов\n"; echo " 2. /index.php/apps/files/api/v1/files - Files API\n"; echo " 3. /ocs/v2.php/apps/files/api/v1/files - OCS Files API\n"; echo " 4. JavaScript делает запросы через fetch() к внутренним API\n\n"; // Проверяем Files API echo " 🔍 Проверяем Files API:\n"; $filesApiUrl = $nextcloudUrl . '/index.php/apps/files/api/v1/files?dir=' . urlencode($testPath); $startTime = microtime(true); $ch = curl_init($filesApiUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/nc_cookies.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/nc_cookies.txt'); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $duration = (microtime(true) - $startTime) * 1000; curl_close($ch); echo " URL: $filesApiUrl\n"; echo " ⏱️ Время: " . round($duration, 2) . " мс\n"; echo " 📊 HTTP код: $httpCode\n"; if ($httpCode == 200) { $data = json_decode($response, true); if ($data && isset($data['data'])) { echo " 📁 Найдено элементов: " . count($data['data']) . "\n"; } } else { echo " ⚠️ Может требовать сессию или другой формат\n"; } // 3. Разница в логике echo "\n3️⃣ РАЗНИЦА В ЛОГИКЕ:\n"; echo "────────────────────────────────────────────────────────────────────────────\n"; echo " ✅ n8n (WebDAV PROPFIND):\n"; echo " - Прямой запрос к S3 через Nextcloud\n"; echo " - Только список файлов (минимальные данные)\n"; echo " - Один запрос = один ответ\n"; echo " - Быстро! ⚡\n\n"; echo " ❌ Веб-интерфейс Nextcloud:\n"; echo " - Использует внутренний Files API\n"; echo " - Может делать НЕСКОЛЬКО запросов:\n"; echo " • Список файлов\n"; echo " • Метаданные (размеры, даты)\n"; echo " • Права доступа\n"; echo " • Превью (если включены)\n"; echo " • Теги и комментарии\n"; echo " - Может проверять кеш Nextcloud (oc_filecache)\n"; echo " - Если кеш устарел - сканирует S3\n"; echo " - Медленно! 🐌\n\n"; // 4. Почему веб-интерфейс медленный echo "4️⃣ ПОЧЕМУ ВЕБ-ИНТЕРФЕЙС МЕДЛЕННЫЙ:\n"; echo "────────────────────────────────────────────────────────────────────────────\n"; echo " 🔍 Возможные причины:\n\n"; echo " 1. Nextcloud проверяет кеш (oc_filecache)\n"; echo " - Если кеш устарел → сканирует S3\n"; echo " - filesystem_check_changes=0 должно помочь, но...\n\n"; echo " 2. Веб-интерфейс делает ДОПОЛНИТЕЛЬНЫЕ запросы:\n"; echo " - Запрос метаданных для каждого файла\n"; echo " - Запрос прав доступа\n"; echo " - Запрос превью (если включены)\n"; echo " - Запрос тегов и комментариев\n\n"; echo " 3. JavaScript загружает данные ПОСТЕПЕННО:\n"; echo " - Сначала структура папок\n"; echo " - Потом метаданные файлов\n"; echo " - Потом превью\n"; echo " - Каждый запрос = задержка\n\n"; echo " 4. Nextcloud может сканировать ВСЮ папку:\n"; echo " - Даже если нужно показать только один уровень\n"; echo " - Проверяет все подпапки\n"; echo " - Особенно при filesystem_check_changes=1\n\n"; // 5. Решение echo "5️⃣ РЕШЕНИЕ:\n"; echo "────────────────────────────────────────────────────────────────────────────\n"; echo " 💡 ИСПОЛЬЗОВАТЬ ПРЯМОЙ WebDAV API (как n8n):\n\n"; echo " Вместо открытия через веб-интерфейс:\n"; echo " https://office.clientright.ru:8443/apps/files/?dir=/crm/...\n\n"; echo " Использовать прямой WebDAV запрос:\n"; echo " https://office.clientright.ru:8443/remote.php/dav/files/admin/crm/...\n\n"; echo " Или создать свой endpoint в CRM, который:\n"; echo " 1. Делает PROPFIND запрос (как n8n)\n"; echo " 2. Парсит XML\n"; echo " 3. Возвращает JSON\n"; echo " 4. Кеширует результат в Redis\n\n"; echo " 📊 ОЖИДАЕМЫЙ ЭФФЕКТ:\n"; echo " - Вместо 3-5 секунд → 0.1-0.5 секунды\n"; echo " - Ускорение в 10-50 раз!\n\n"; echo "════════════════════════════════════════════════════════════════════════════════\n"; echo "✅ ИТОГ: Веб-интерфейс делает больше запросов, чем нужно\n"; echo "💡 Решение: Использовать прямой WebDAV API (как n8n)\n"; echo "════════════════════════════════════════════════════════════════════════════════\n";