Files
crm.clientright.ru/SEND2COURT_S3_URL_FIX.md

119 lines
5.6 KiB
Markdown
Raw Permalink Normal View History

# Исправление проблемы с символом # в URL файлов S3
**Дата:** 15 октября 2025
**Проблема:** Ошибка 403 при скачивании файлов из S3 с символом `#` в имени
**Статус:** ✅ Исправлено
## Описание проблемы
При отправке документов в суд через скрипт `Send2Court.php` возникала ошибка 403 при скачивании некоторых файлов из S3:
```
2025-10-15 15:00:07 - ошибка скачивания файла из S3, HTTP код: 403
URL: .../8_Договора_оказание_услуг_08-27-2025-15-47-39_Агеев__13_CTP#realfile.pdf
```
### Причина
Символ `#` в URL интерпретируется браузерами и curl как **якорь** (anchor/fragment identifier). Всё после `#` считается частью фрагмента URL и не отправляется на сервер. Например:
- URL: `https://s3.example.com/file#realfile.pdf`
- Сервер получает: `https://s3.example.com/file`
Из-за этого S3 не мог найти файл и возвращал ошибку 403.
## Решение
Модифицирована функция `getTempFileFromS3()` в файле `/include/utils/Debexpert-guzzle.php`:
### Что изменено
1. **Автоматическая замена проблемных символов:**
- `#``%23` (URL-кодированная версия)
- ` ` (пробел) → `%20`
2. **Улучшенное логирование:**
- Логируется исходный URL
- Если URL был изменён, логируется исправленная версия
- Легче отслеживать проблемы
### Пример работы
**До исправления:**
```
URL: https://s3.twcstorage.ru/bucket/file_CTP#realfile.pdf
Результат: ❌ HTTP 403
```
**После исправления:**
```
Исходный URL: https://s3.twcstorage.ru/bucket/file_CTP#realfile.pdf
Исправленный: https://s3.twcstorage.ru/bucket/file_CTP%23realfile.pdf
Результат: ✅ HTTP 200
```
## Затронутые файлы
-`/include/utils/Debexpert-guzzle.php` - функция `getTempFileFromS3()` обновлена
- `/include/utils/Letters.php` - уже имеет обработку `#realfile` (другая сигнатура функции)
## Дополнительные преимущества
- Исправление работает автоматически, **не требует изменений в БД**
- Обрабатывает не только `#`, но и пробелы
- Логирование помогает отслеживать исправления
- Совместимо со старыми URL без проблемных символов
## Рекомендации
### Для будущего
Рекомендуется при загрузке файлов в S3 **сразу очищать имена файлов** от проблемных символов:
- Заменять `#` на `-` или `_`
- Убирать или заменять пробелы на `_`
- Избегать других спецсимволов: `&`, `?`, `%`, и т.д.
### Мониторинг
После внедрения исправления в логах `logs/send2court.log` появятся записи:
```
2025-10-15 15:00:07 - скачиваем файл из S3 (исходный URL): .../file#test.pdf
2025-10-15 15:00:07 - URL исправлен для корректной загрузки: .../file%23test.pdf
```
Это нормальное поведение и подтверждает, что исправление работает.
## Результаты проверки
**Дата:** 15 октября 2025, 16:41-16:43
**Проект:** 390657 (Агеев / ООО СКИЛБОКС)
### ✅ Исправление работает идеально!
Все 5 проблемных файлов скачались успешно:
```
2025-10-15 16:41:23 - скачиваем файл из S3 (исходный URL): ...CTP#realfile.pdf
2025-10-15 16:41:23 - URL исправлен для корректной загрузки: ...CTP%23realfile.pdf
2025-10-15 16:41:23 - файл сохранен во временную папку: /tmp/other_doc_0_1760535683.pdf
```
**Скачанные файлы:**
1. ✅ 8_Договора_оказание_услуг...CTP#realfile.pdf
2. ✅ 9_Подтверждение_оплаты...CTP#realfile.pdf
3. ✅ 10_1_Скрин_личногоабинета...CTP#realfile.pdf
4. ✅ 11_1_Подтверждение_претензионной_работы...CTP#realfile.pdf
5. ✅ 11_2_Подтверждение_претензионной_работы...CTP#realfile.pdf
### 🎯 Бонус: решена проблема ошибки 500!
Оказалось, что **ошибка 500 от прокси-сервера возникала из-за этих недостающих файлов**:
- JSON указывал 21 файл, но реально отправлялось только 16
- Система обнаруживала несоответствие и возвращала ошибку 500
- После исправления все 21 файл загрузились → получен номер **41RS0001-201-25-0001140**
---
**Статус:** ✅ Проблема полностью решена и проверена на реальном проекте