|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Alexander V. Gaiduk 2:5020/400 21 Jun 2004 14:25:54 To : All Subject : mod_perl - глюк? -------------------------------------------------------------------------------- вопрос в лоб: как под mod_perl читать читать данные с формы по методу POST? предыстория глюка: ваял тут движок для сайтика на Apache::ASP, (у этой АСПы внутре mod_perl) сперва ваял на Win32 - типа всё путем, отлично пахало, никаких траблов. но подумалось, ведь это чудо будет на линухе жить, поставил под VMware линух, RH9, водрузил туда (на имеемый mod_perl) Apache::ASP, завелось, поехало. Продолжая ваять наткнулся на забавный глюк: при передаче с формы данных по методу POST скрипт видит только первые 7.5 кило, и грит типа больше нету... проверил это же на Win32 - работает сабака, кушает POSTом до 14 метров данных, и ничего не теряет. перенес эту же страничку на линух - 7.5 кило и хоть ты тресни! стал ковырять дальше по исходникам Apache::ASP дополз до BinaryRead... там они просто читают из закэшированного буфера: $r->read($data, $length); получаем 7.5 кило ! это же под виндой читает ВСЁ !!! дальше стал исследовать саму отправку данных методом POST - его отличия линуховой и виндовой реализации mod_perl. нарисовал простейший скриптик, где читаю: read(STDIN, $data, $ENV{'CONTENT_LENGTH'}); под виндой - все читает, под линухом 7.5 кило! выяснилось, что если читать в цикле: while (read(STDIN, $buf, $ENV{'CONTENT_LENGTH'})>0) {$data .= $buf;} то и в виндозе и в линухе читается всё !!! причем при детальном исследовании оказалось, что в виндозе все данные сразу помещаются в буфер чтения STDIN в mod_perl, а в линухе буфер чтения ограничен 8000 байтами, но тем не менее все данные от туда тоже можно вычитать (читать - пока читаются)... пришлось такой циклик воткнуть в Apache::ASP::Request в функцию BinaryRead - после этого все поехало прально. Скажите, почему такое разное поведение mod_perl в линухе и в вындосе? -- С уважением, вебмастер мэрии Архангельска :: :: $_='q=6I2?56CPw2:5F<Pl82Gp2C94:EJ^CFn';tr#P-~\x20-O#\x20-~#;print; --- ifmail v.2.15dev5.3 * Origin: Internet-Arkhangelsk Company (2:5020/400) Вернуться к списку тем, сортированных по:
Архивное /ru.cgi.perl/8926be2632c5.html, оценка из 5, голосов 10
|