LINUX.ORG.RU

HTTP Upload


0

0

Надо было написать скрипт который закачивает файлы на rapidshare. Был найден скрипт перловый и он переписан на php. Всё работает. Однако в нём есть одна неточность которая меня как человека нелюбящего неточности очень возмущает. В нём есть такая строчка:

$boundary = "---------------------632865735RS4EVER5675865";

т.е. boundary которая разделяет чего то там в HTTP заголовке. Если файл содержит этот набор символов произойдёт ошибка (проводил эксперимент). Вопрос: как с этим бороться, хотя вероятность и очень мало тем не менне она есть и это неприятно. Перебирать весь файл и смотреть нет ли такой последовательности символов будет наверно неэффективно в случае с большим файлом. Наверняка есть какой-то алгоритм как получить такую посл-ть которая не встретится в файле. Посоветуйте как пофиксить имеющийся скрипт.

Ответ на: комментарий от phoenix

так ведь остаётся вероятность того что случайный boundary будет содержать последовательность которая есть в файле

md5xxx1
() автор топика
Ответ на: комментарий от gorilych

через base64 получится на 33% больше файл если верить мануалу. какой то есть алгоритм нормальный для этого. вобще глупо придумали с этим разделителем, лучше бы вначале поле содержащее длину в байтах.

md5xxx1
() автор топика
Ответ на: комментарий от md5xxx1

вот лень смотреть, давно это делал, но, кажется, все нормальные сервера понимают «Content-Transfer-Encoding: 8bit». то есть, без base64. возможно, следует указать «Content-Length:»

потом,

остаётся вероятность того что случайный boundary будет содержать последовательность которая есть в файле

да. для честности, можешь поискать boundary в отправляемых данных. но:

1. как правило, при большом объеме отправляемых данных это непрактично.

2. при нормальном boundary, вероятность коллизии низка. кто-нибудь, чуть более знакомый с математикой чем я, без труда выведет функцию вероятности коллизии от размера данных.

3. рандомный boundary для того и нужен, что если один раз отправка закончилась неудачей, то следует ее повторить с другим boundary.

dmiceman ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.