Avatar billede Slettet bruger
14. august 2007 - 06:32 Der er 11 kommentarer og
1 løsning

Timeout i perl?

Jeg har sat et perl script til at tage imod STDIN fra en browser upload formular. Via browseren uploader jeg en stor fil.

Det virker fint, indtil jeg forsøger at uploade filer på 400+ mb. Med filer større end 4-500 mb stopper scriptet pludselig uden at smide en fejl.

Jeg har sat en log funktion ind mange steder i scriptet, men det ser ud til at det bare dør et sted under læsning af STDIN. Apache error loggen indeholder heller ikke noget.

Browseren sender/arbejder indtil hele filen er uploadet.

Jeg bruger både -w og strict.

Findes der en timeout funktion i perl som skal forhøjes? Hvad kan ellers rette problemet?
Avatar billede Slettet bruger
14. august 2007 - 10:12 #1
kan du forklare noget mere om hvilken kode der er anvendt?
Avatar billede Slettet bruger
14. august 2007 - 11:28 #2
Det er ganske simpelt denne loop som er aktiv indtil scriptet dør:

while($data = <STDIN>) {
}
Avatar billede Slettet bruger
14. august 2007 - 11:40 #3
har du overvejet at anvende CGI modulet til at håndtere det med i stedet?

hvilken type fil er det du uploader?
Avatar billede Slettet bruger
14. august 2007 - 11:55 #4
Jeg kender ikke meget til CGI modulet, men da jeg arbejder med meget store filer (op til 1 gb) vil jeg synes at det er en fordel at bruge mest mulig "basis" programmering. Desuden har jeg brug for at lave operationer undervejs mens datafilen modtages.

Filtype er irrelevant, jeg samme fejl ved f.eks. zip og avi.
Avatar billede Slettet bruger
15. august 2007 - 13:12 #5
CGI modulet sparer dig for en masse manuelt udviklings arbejde.

Hvad er hele <form> linien på sin side?

Typen kan også have noget at sige. Jeg vil lige prøve at lave en test med CGI modulet
Avatar billede Slettet bruger
15. august 2007 - 21:34 #6
Ja, CGIen sparer en del arbejde, men giver dig også mindre kontrol. F.eks. mener jeg ikke at jeg kan modtage x byte fra STDIN, lave noget andet, og så modtage de næste x byte.

<form method="post" action="/upload.cgi" enctype="multipart/form-data">
Avatar billede Slettet bruger
16. august 2007 - 10:06 #7
Det har du sikkert ret i, jeg lavede en test igår med CGI modulet. Uploadede en 1.8Gb ISO fil. CGI henter filen ind et eller andet sted og stiller et handle tilrådighed, så kan man så selv bestemme hvor man ønsker at flytte den hen.

Men det er rigtigt at den laver sikkert noget totalt ineffektivt i og med at den henter filen ned, og så skal man kopiere den på plads.

Men jeg kan ikke finde nogen som helst grund til at den skulle stoppe midt i det hele, ok mit script gav fejl når den var værdig men alle 1.8Gb var fint hentet ned.

Husker du at køre i binmode?
Avatar billede Slettet bruger
16. august 2007 - 12:10 #8
Jeg har aldrig brugt binmode, men scriptet kører jo fint som det er nu, så længe filen ikke er for stor. Hvis jeg uploader en fil af samme type (f.eks. avi), blot større, så dør det.
Avatar billede Slettet bruger
16. august 2007 - 12:31 #9
og der kommer slet ingen errors nogen steder? slet ikke i nogen log?

Hvor stor en fil når den at lave? måske kan det sige noget.

Til binærdata er det sikreste at man sørger for at ens handles kører i binmode, ikke helt klar over hvorfor, men det er hvad jeg har læst mig til.

hvad er det mindste uploadings script du kan lave som stadigvæk giver fejlen, så kan du jo poste det script her, så vi andre kan teste det.
Avatar billede breum Nybegynder
29. august 2007 - 12:42 #10
Jeg tror ikke der er noget time-out i perl.
Kan det være timeout i din browser?
Kan det være timeout i Apache (eller hvad du nu bruger som http-server)?
Avatar billede Slettet bruger
29. august 2007 - 12:55 #11
Jeg kan se at min sidste kommentar aldrig blev skrevet herinde. Hvordan kan en hjemmeside som eksperten.dk IKKE rette deres timeout-fejl mht. sessions/cookies???

Anyhoo, jeg prøvede at sætte scriptet til at udskrive et punktum hvert minut for at browseren ikke lavede timeout. Det ændrede ikke noget, og jeg har testet på flere computere i flere browsere.

Jeg kan kun finde en receive/send timeout i apache. Den er på 20 sekunder, så den burde ikke blive aktiveret. Jeg kan dog prøve at sætte den op mens jeg tester nogle andre ting...

Ellers skriver jeg herinde igen når jeg har en skrabet version af scriptet som I kan teste/kigge på.
Avatar billede Slettet bruger
12. oktober 2010 - 21:14 #12
Ingen løsning :(
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester