Большой Воронежский Форум
» Программирование>запись в php портит файл
grifon 18:06 19.12.2007
пишу тут на php модуль торрентового обменника для движка.
В чем суть.
Открывается торрент-файл с сайта, вписываеться в его тело пасскей и отдается на скачивание клиенту.
торрен-файл выглядит так

Сообщение от :
d8:announce32:http://www.site.com/announce.php10:created by13:uTorrent/150013:creation datei1198018694e8:encoding5:UTF-84:infod6:lengthi551740e4:name7:icq.zip12:piece lengthi65536e6:pieces180:ºµX˪vƒ`©p«鳱`*M…6z†�“ҳI IRܾ£*Su и далее крюкозябры*

а проблема периодически проявляеться в том, что во время открывания файла убиваются несколько символов из крюкозябров в самом конце файла. Причем в одном торрент-файле они могут не убиваться никогда и файл отдается-запускаеться нормально, а в другом - всегда несколько знаков с конца пропадают.
Причем просто открытия файла file_get_contents достаточно для убивания. [Ответ]
DeniSS1 20:12 19.12.2007
grifon, в php я ни бум-бум, но, может, превышена предельная длина имени? [Ответ]
netwind 23:18 19.12.2007
быть такого не может. а вот неаккуратное использование строковых функций(например в регулярных выражениях забыть про модификатор /s при работе с двоичными данными) и неочевидные ошибки в результате, какой-нибудь перекодирующий веб-сервер, это запросто.
на всякий случай попробуйте указать при открытии файла бинарный режим (флажек 'b' в fopen). ну и вычленить независимый тестовый кусок кода и на нескольких разных хостингах погонять. [Ответ]
AIM-9M 09:56 20.12.2007
Код покажи, что ли... [Ответ]
grifon 11:32 20.12.2007
Нашел. Гадости делала последняя строка

Сообщение от :
header('Content-Length: ' . strlen($output));

в выдаче файла после правки почему-то неверно подсчитывала размер.
Пока закомментировал ее. [Ответ]
netwind 12:01 20.12.2007
А какой версии у вас PHP и на какой платформе? [Ответ]
Вверх