Проблема с переездом c TBDEV на r400

Im Sunny

Пользователь
#1
При попытке скачать торрент файл выдает ошибку "This is not a bencoded file", поиск на форуме результата не дал...
 

Im Sunny

Пользователь
#3
Код:
if (preg_match('/^i(-{0,1}\d+)e/', $s, $m)) {
Не?
да возможно, только как я понимаю это строки из TBDEV?
Судя по всему в r400 это строки:

PHP:
    $numlen = strspn($str, '0123456789', $pos);
    $spos = $pos;
    $pos += $numlen;
 
    if (($pos >= $strlen) || ($str[$pos] != ':'))
    {
    return null;
    }

В $str содержится так же и тектовая информация... урл анонсера, инфа о заливающем и т.д. Т.е. для соответствия необходимо к 0123456789 добавить a-zA-Z-? я правильно понимаю? только верный ли это способ? Или есть какие нибудь другие варианты.. .просто странно это все.. или у меня TBDEV не так заливат торрент файлы, или что.. "if (preg_match('/^i(-{0,1}\d+)e/', $s, $m))" датируется декабрем 2011 на сколько я понял.. r400 вышел в релиз 13го апреля.. наверное у других то все хорошо?...

Заранее спасибо
 

Im Sunny

Пользователь
#4
В общем разобрался для чего этот код, и как работает, а так же нашел причину по которой это происходит. Исправлю сам, спасибо за помощь
 

Im Sunny

Пользователь
#6
Напиши потом решение, возможно стоит добавить в конвертер.
Проблема в следующем:
приблизительная структура торрент файла:
d$N:$str
где N - длина строки $str.
в торрент файлах залитых через TBDEV $str в win1251, функции TorrentPier считают длину строки $str при помощи strlen в результате получаем косяк при проверки корректности торрент файла.. Вначале решил проблему при помощи функции mb_strlen(), но на выходе получил некорректный торрент файл (клиент его не воспринимает, выдает ошибку)...
Дальше пока не ковырял, времени небыло, будет попробую еще что нибудь придумать, если что решение скину

зы: если кто в свое время сталкивался с такими проблемами буду благодарен за подсказку...
зыы: Торрент файл сконвертировать при помощи iconv тоже не удается..
 

Im Sunny

Пользователь
#7
Загружаемые файлы аналогичны...
Не долго думая заменил функции
strlen($str) на mb_strlen($str, 'windows-1251') и все сопутствующие... e.g. floatval(substr($str, $spos, $numlen)) на floatval(mb_substr($str, $spos, $numlen, 'windows-1251')) и т.д. если кому нужно могу дифф сделать отдельный... в принципе можно было решить проблему просто заменив strlen на mb_strlen предварительно сменив кодировку скрипта с помощью mb_internal_encoding, поидее так же должно работать, но на всякий случай решил заменить только там где нужно.. Костыль в общем :( но работает
 

lexafromorel

Пользователь
#8
Загружаемые файлы аналогичны...
Не долго думая заменил функции
strlen($str) на mb_strlen($str, 'windows-1251') и все сопутствующие... e.g. floatval(substr($str, $spos, $numlen)) на floatval(mb_substr($str, $spos, $numlen, 'windows-1251')) и т.д. если кому нужно могу дифф сделать отдельный... в принципе можно было решить проблему просто заменив strlen на mb_strlen предварительно сменив кодировку скрипта с помощью mb_internal_encoding, поидее так же должно работать, но на всякий случай решил заменить только там где нужно.. Костыль в общем :( но работает
замена strlen на md_strlen не помогла можешь подробнее написать что делал?
 
Сверху