|
|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Artem Chuprina 2:5020/400 22 Jun 2004 14:17:40 To : Alexander V. Gaiduk Subject : Re: mod_perl - глюк? -------------------------------------------------------------------------------- Alexander V. Gaiduk @ Mon, 21 Jun 2004 10:25:54 +0000 (UTC): AVG> вопрос в лоб: AVG> как под mod_perl читать читать данные с формы по методу POST? AVG> предыстория глюка: AVG> ваял тут движок для сайтика на Apache::ASP, (у этой АСПы внутре mod_perl) AVG> сперва ваял на Win32 - типа всё путем, отлично пахало, никаких траблов. AVG> но подумалось, ведь это чудо будет на линухе жить, поставил под AVG> VMware линух, RH9, водрузил туда (на имеемый mod_perl) Apache::ASP, AVG> завелось, поехало. Продолжая ваять наткнулся на забавный глюк: AVG> при передаче с формы данных по методу POST скрипт видит только AVG> первые 7.5 кило, и грит типа больше нету... AVG> проверил это же на Win32 - работает сабака, кушает POSTом до 14 метров AVG> данных, и ничего не теряет. AVG> перенес эту же страничку на линух - 7.5 кило и хоть ты тресни! AVG> стал ковырять дальше по исходникам Apache::ASP дополз до BinaryRead... AVG> там они просто читают из закэшированного буфера: $r->read($data, $length); AVG> получаем 7.5 кило ! AVG> это же под виндой читает ВСЁ !!! AVG> дальше стал исследовать саму отправку данных методом POST - его отличия AVG> линуховой и виндовой реализации mod_perl. AVG> нарисовал простейший скриптик, где читаю: AVG> read(STDIN, $data, $ENV{'CONTENT_LENGTH'}); AVG> под виндой - все читает, под линухом 7.5 кило! AVG> выяснилось, что если читать в цикле: AVG> while (read(STDIN, $buf, $ENV{'CONTENT_LENGTH'})>0) {$data .= $buf;} AVG> то и в виндозе и в линухе читается всё !!! AVG> причем при детальном исследовании оказалось, что в виндозе все данные AVG> сразу помещаются в буфер чтения STDIN в mod_perl, а в линухе AVG> буфер чтения ограничен 8000 байтами, но тем не менее все данные от туда AVG> тоже можно вычитать (читать - пока читаются)... AVG> пришлось такой циклик воткнуть в Apache::ASP::Request AVG> в функцию BinaryRead - после этого все поехало прально. AVG> Скажите, почему такое разное поведение mod_perl в линухе и в вындосе? Я бы порекомендовал посмотреть настройки апача. Hа предмет ограничения принимаемого количества данных. А еще - обратить внимание на его версию. Если там 2.x и соответствующий mod_perl - лучше откатиться на 1.3.x. AFAIR эту связку еще не довели до работоспособного состояния. -- Artem Chuprina RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757 --- ifmail v.2.15dev5.3 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по:
Архивное /ru.cgi.perl/2560636c767c9.html, оценка из 5, голосов 10
|