✨ Features: - Migrated ALL files to new S3 structure (Projects, Contacts, Accounts, HelpDesk, Invoice, etc.) - Added Nextcloud folder buttons to ALL modules - Fixed Nextcloud editor integration - WebSocket server for real-time updates - Redis Pub/Sub integration - File path manager for organized storage - Redis caching for performance (Functions.php) 📁 New Structure: Documents/Project/ProjectName_ID/file_docID.ext Documents/Contacts/FirstName_LastName_ID/file_docID.ext Documents/Accounts/AccountName_ID/file_docID.ext 🔧 Technical: - FilePathManager for standardized paths - S3StorageService integration - WebSocket server (Node.js + Docker) - Redis cache for getBasicModuleInfo() - Predis library for Redis connectivity 📝 Scripts: - Migration scripts for all modules - Test pages for WebSocket/SSE/Polling - Documentation (MIGRATION_*.md, REDIS_*.md) 🎯 Result: 15,000+ files migrated successfully!
122 lines
5.5 KiB
Markdown
122 lines
5.5 KiB
Markdown
# Исправления Send2Court - 23 октября 2025
|
||
|
||
## Проблемы, которые были исправлены
|
||
|
||
### 🔴 Проблема №1: HTTP 500 - Invalid Control Characters
|
||
**Ошибка:** `Specified value has invalid Control characters. (Parameter 'value')`
|
||
|
||
**Причина:** В адресах из базы данных присутствовали HTML entities (`—`, ` `, `"` и т.д.), которые попадали в JSON и отправлялись в API debex.ru. Сервер не мог обработать эти символы и возвращал ошибку 500.
|
||
|
||
**Пример проблемного адреса:**
|
||
```
|
||
362047, Республика Северная Осетия — Алания, Владикавказ...
|
||
```
|
||
|
||
**Решение:** Добавлено декодирование HTML entities с помощью функции `html_entity_decode()` для всех текстовых полей перед отправкой в API:
|
||
- `courtNoticesAddress` - адрес для судебных уведомлений
|
||
- `legalAddress` - юридический адрес
|
||
- `actualResidenceAddress` - фактический адрес
|
||
- `name` - название организации
|
||
- Адреса, используемые для поиска суда
|
||
|
||
**Изменения в коде:**
|
||
```php
|
||
// Было:
|
||
$data['mySelfAdditionalData']['courtNoticesAddress'] = $adb->query_result($result, 0, 'addr_notice');
|
||
|
||
// Стало:
|
||
$data['mySelfAdditionalData']['courtNoticesAddress'] = html_entity_decode($adb->query_result($result, 0, 'addr_notice'), ENT_QUOTES | ENT_HTML5, 'UTF-8');
|
||
```
|
||
|
||
---
|
||
|
||
### 🔴 Проблема №2: HTTP 403 при скачивании файлов из S3
|
||
**Ошибка:** `ошибка скачивания файла из S3, HTTP код: 403`
|
||
|
||
**Причина:** В именах файлов на S3 присутствовали специальные символы:
|
||
- `#` (хештег) - интерпретируется как якорь URL
|
||
- Пробелы
|
||
- Кириллица в именах файлов
|
||
- Другие спецсимволы
|
||
|
||
**Пример проблемного URL:**
|
||
```
|
||
https://s3.twcstorage.ru/.../8_Договор_на_оказание_услуг_09-04-2025-13-52-43_Чужба_10_CTP#realfile.pdf
|
||
```
|
||
|
||
**Решение:** Переписана функция `getTempFileFromS3()` с правильным кодированием URL:
|
||
1. URL разбирается на части с помощью `parse_url()`
|
||
2. Путь разбивается на сегменты по `/`
|
||
3. Каждый сегмент кодируется с помощью `rawurlencode()`
|
||
4. URL собирается обратно
|
||
|
||
Теперь символы правильно кодируются:
|
||
- `#` → `%23`
|
||
- Пробел → `%20`
|
||
- Кириллица → правильные UTF-8 последовательности
|
||
|
||
**Изменения в коде:**
|
||
```php
|
||
// Было:
|
||
$s3Url = str_replace('#', '%23', $s3Url);
|
||
$s3Url = str_replace(' ', '%20', $s3Url);
|
||
|
||
// Стало:
|
||
$urlParts = parse_url($s3Url);
|
||
$path = isset($urlParts['path']) ? $urlParts['path'] : '';
|
||
$pathSegments = explode('/', $path);
|
||
$encodedSegments = array_map(function($segment) {
|
||
return rawurlencode($segment);
|
||
}, $pathSegments);
|
||
$encodedPath = implode('/', $encodedSegments);
|
||
$s3Url = $urlParts['scheme'] . '://' . $urlParts['host'] . $encodedPath;
|
||
```
|
||
|
||
---
|
||
|
||
## Дополнительные улучшения
|
||
|
||
### Улучшенное логирование
|
||
- Добавлен вывод размера скачанного файла
|
||
- Добавлен вывод CURL ошибок при проблемах со скачиванием
|
||
- Улучшены сообщения в логах для лучшей диагностики
|
||
|
||
### Проверка валидности данных
|
||
- Добавлена проверка корректности URL перед попыткой скачивания
|
||
- Добавлена проверка, что файл не пустой перед сохранением
|
||
|
||
---
|
||
|
||
## Файлы, которые были изменены
|
||
|
||
- `/var/www/fastuser/data/www/crm.clientright.ru/include/utils/Debexpert-guzzle.php`
|
||
- Функция `Send2Court()` - добавлено декодирование HTML entities
|
||
- Функция `getCourt()` - добавлено декодирование HTML entities в адресах
|
||
- Функция `getTempFileFromS3()` - переписана с правильным кодированием URL
|
||
|
||
---
|
||
|
||
## Тестирование
|
||
|
||
После внедрения исправлений необходимо протестировать отправку:
|
||
1. Искового с адресом, содержащим HTML entities (`—`, ` ` и т.д.)
|
||
2. Проекта с файлами на S3, содержащими `#` или другие спецсимволы в имени
|
||
3. Проекта с кириллицей в именах файлов на S3
|
||
|
||
---
|
||
|
||
## Мониторинг
|
||
|
||
Проверять логи после отправки на наличие:
|
||
- ❌ `HTTP статус код: 500` + `Invalid Control characters`
|
||
- ❌ `ошибка скачивания файла из S3, HTTP код: 403`
|
||
- ✅ `файл сохранен во временную папку` + размер файла
|
||
- ✅ `получили ответ на запрос` + номер дела
|
||
|
||
---
|
||
|
||
**Дата исправления:** 23 октября 2025
|
||
**Автор:** AI Assistant (Claude)
|
||
**Статус:** ✅ Готово к тестированию
|
||
|