# Исправление проблемы с символом # в 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** ✅ --- **Статус:** ✅ Проблема полностью решена и проверена на реальном проекте