решено Rych\Bencode\Exception\RuntimeException Unknown entity found at offset 611

lufton

Пользователь
Версия TP
2.3.0.1
Перенёс сайт с локалки на сервер. При добавлении torrent файла движок вылетает с ошибкой, ругаясь на torrent файл.
Движок устанавливал через git clone; composer install. Видел, что помогает изменение кодировки всех файлов на UTF-8 без BOM, но я так понимаю, что git clone и так с репозитория скачивает их в такой кодировке.
 

Вложения

  • Screenshot_2.png
    Screenshot_2.png
    108.7 KB · Просмотры: 15

lufton

Пользователь
Господи, как же сложно мне далось решение этой проблемы! Но я нашёл его.
Мне пришлось пройти долгий путь начиная с изучения формата torrent файла до отладки подключаемой библиотеки Bencode. Но я сделал это! Чувствую себя героем!
Оказывается есть такой параметр в php.ini, как mbstring.func_overload, который отвечает за перегрузку функций работы с многобайтовыми строками. Так вот torrent файлы читаются с диска в строковую переменную и если значение mbstring.func_overload установлено в 2, то строка считается многобайтовой и её длина, вычисляемая strlen не соответствует количеству байт файла. Поэтому парсер Bencode считает, что файл неправильно сформирован.
Переключаем mbstring.func_overload в 0, перезапускаем сервер и о чудо! Всё работает.
Если кому интересно почему в php.ini у меня стояло mbstring.func_overload=2 – когда-то устанавливал Bitrix24, которые требует установки этого параметра.
 
Сверху