Probleme beim Upload (Apache 2.0)
Volker
- webserver
Hallo zusammen!
Ich habe ein großes Problem,vielleicht kann mir jemand helfen:
Ich benutze den HP-UX Apache Webserver 2.0.46 und habe damit folgendes Problem:
Falls eine Datei(es sind nur zip-Dateien zugelassen) über Netscape oder Mozilla hochgeladen werden soll, versucht der Server diese zu laden, doch bricht dann mit folgender Fehlermeldung ab:
Software error:
CGI.pm: Server closed socket during multipart read (client aborted?).
Dies geschieht jedoch nur,wenn die Datei größer als ca. 7,5kb ist. Zip-Dateien unter 7,5kb können problemlos geladen werden.
Es scheint so, als ob die Daten übertragen werden,da bei großen Dateien das Laden eine gewisse Zeit dauert und der Content-Length auch die richtige Angabe anzeigt. Jedoch wird entweder alles über 7,5kb abgeschnitten und somit irgendwann beim Laden Nullbytes produziert oder es werden sofort Nullbytes gesendet.
Warum dies ist,weiß ich leider nicht.
Außerdem stellt sich die Frage,warum mit dem IE alles einwandfrei funktioniert und nur Probleme bei Netscape oder Mozilla auftreten?
Ich hatte vorher den Apache 1.3.27 benutzt und auf ihm funktioniert alles wunderbar (also auch mit Netscape und Mozilla). Alle funktionierenden Skripte (*.cgi und *.pm) wurden an den neuen Server angepaßt.
Der neue Apache hat zusätzlich ein Openssl update bekommen.
Kann es daran liegen??? Oder weiß jemand eine andere Antwort?
Viele Grüße,
VM
Moin!
Hallo zusammen!
Es muss nicht daran liegen, aber es kann: meines Wissens enthält die CGI.pm eine Einstellung, damit man nicht mit dem Hochladen einer großen Datei die Platten des Servers vollmüllen kann. (z.B. als DoS- Attacke)
Die Einstellung kannst Du mit:
use constant MAX_FILE_SIZE => XXXX;
setzen. Die Angabe erfolgt in Bytes.
7,5 kb wäre also sehr restriktiv.
Außerdem stellt sich die Frage,warum mit dem IE alles einwandfrei funktioniert und nur Probleme bei Netscape oder Mozilla auftreten?
Hm: Blick in die Glaskugel... ist bei deinem Formelement eingetragen, was gesendet wird?
<form.... ENCTYPE="multipart/form-data">
Ferner: erfolgt die Datenübertragung via GET? Post wäre hier angebracht, manche Browser begrenzen das sonst.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Servus und mal Danke für die Antwort!
Es muss nicht daran liegen, aber es kann: meines Wissens enthält die CGI.pm eine Einstellung, damit man nicht mit dem Hochladen einer großen Datei die Platten des Servers vollmüllen kann. (z.B. als DoS- Attacke)
Die Einstellung kannst Du mit:
use constant MAX_FILE_SIZE => XXXX;
setzen. Die Angabe erfolgt in Bytes.
hat leider keinerlei Auswirkung gehabt :-(
Außerdem stellt sich die Frage,warum mit dem IE alles einwandfrei funktioniert und nur Probleme bei Netscape oder Mozilla auftreten?
Hm: Blick in die Glaskugel... ist bei deinem Formelement eingetragen, was gesendet wird?<form.... ENCTYPE="multipart/form-data">
ENCTYPE ist korrekt (also so wie oben) eingetragen.
Ferner: erfolgt die Datenübertragung via GET? Post wäre hier angebracht, manche Browser begrenzen das sonst.
Und POST wird auch verwendet.
Hats du noch andere Vorschläge? Bin nämlich mit meinem Apache-Latein am Ende :-)
Viele Grüße,
Volker
hi,
Hats du noch andere Vorschläge? Bin nämlich mit meinem Apache-Latein am Ende :-)
ist vielleicht $CGI::POST_MAX irgendwo im Script gesetzt?
Ansonsten lass das Script doch mal auf einen anderen Server laufen zum Eingrenzen des Faktums Script vs Server. Oder poste mal den Code...
Viele Grüße, Rolf
hi,
Hats du noch andere Vorschläge? Bin nämlich mit meinem Apache-Latein am Ende :-)
ist vielleicht $CGI::POST_MAX irgendwo im Script gesetzt?
Ansonsten lass das Script doch mal auf einen anderen Server laufen zum Eingrenzen des Faktums Script vs Server. Oder poste mal den Code...
hier habch noch was gefunden
http://wasd.vsm.com.au/src/perl_old/readmore.html
it means:
*CGI.pm and Perl v5.6.0 could not read a POSTed multipart stream satisfactorily producing the error "CGI.pm: Server closed socket during multipart read (client aborted?)". This is apparently a known problem fixed by migrating to Perl 5.6.1 (or later) and it's CGI.pm. *
Viele Grüße, Rolf
Servus Rolf!
ist vielleicht $CGI::POST_MAX irgendwo im Script gesetzt?
Ansonsten lass das Script doch mal auf einen anderen Server laufen zum Eingrenzen des Faktums Script vs Server. Oder poste mal den Code...
$CGI::POST_MAX ist nicht gesetzt,nur im CGI.pm,aber dort groß genug.
Ich glaube nicht,dass es am Script liegt,da es auf dem "alten" Apache 1.3.27 einwandfrei gelaufen ist und der upload perfekt mit dem IE, auch unter dem neuen Apache, läuft.
hier habch noch was gefunden
http://wasd.vsm.com.au/src/perl_old/readmore.htmlit means:
*CGI.pm and Perl v5.6.0 could not read a POSTed multipart stream satisfactorily producing the error "CGI.pm: Server closed socket during multipart read (client aborted?)". This is apparently a known problem fixed by migrating to Perl 5.6.1 (or later) and it's CGI.pm. *
das hört sich nach einer heißen Spur an,danke.
Jedoch hab ich eben grad gesehen,dass die Version Perl 5.6.1 benutzt wird!
Und das kuriose ist ja,das alles mit dem IE geht,nur bei NetscapeMozilla macht er diese Faxen.
Außerdem habe ich herausgefunden,dass er versucht die Datei anscheinend vollständig zu laden und dann erst den Fehler bringt.
Soll heißen:
Eine Datei mit 650000 bytes wird geladen,dann aber unverständlicherweise auf ca. 7500 bytes heruntergesetzt oder abgeschnitten oder so in der Art.
Viele Grüße,
Volker
Viele Grüße,
Volker
hi Volker,
Und das kuriose ist ja,das alles mit dem IE geht,nur bei NetscapeMozilla macht er diese Faxen.
nunja, die headers welche die Browser senden sind unterschiedlich.
uploadInfo() zeigt dir diese header an, vielleicht wird das irgendwo im Script verwendet?
Wie schon gesagt, das fällt alles in den Bereich der Glaskugeln...
Viele Grüße, Rolf
hi Volker,
Und das kuriose ist ja,das alles mit dem IE geht,nur bei NetscapeMozilla macht er diese Faxen.
nunja, die headers welche die Browser senden sind unterschiedlich.
uploadInfo() zeigt dir diese header an, vielleicht wird das irgendwo im Script verwendet?
Wie oder wo muss ich das uploadInfo() einfügen? Im upload-CGI-Script?
Hier mal der Code von meinem upload-script:
use strict;
use CGI;
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);
use vars qw($exlock $unlock $LZeit $Logzeit $ip $path @Pfad $home $public_path $data_path $Beschr $Empf $Datei $user $BeschrLe
ngth);
$exlock=2;
$unlock=8;
#---------------------------------------------------------
#---------------------------------------------------------
my $CTIME = localtime(time);
$CTIME =~ /^([A-Za-z]*?)\s*([A-Za-z]*?)\s*(\d*?)\s*(\d*?):(\d*?):(\d*)\s*(\d*)$/;
my $Tag = $1;
my $Monat = $2;
my $Monatstag = $3;
my $Stunden = $4;
my $Minuten = $5;
my $Sekunden = $6;
my $Jahr = $7;
my %Monate = (Jan => "01", Feb => "02", Mar => "03", Apr => "04", May => "05", Jun => "06",
Jul => "07", Aug => "08", Sep => "09", Oct => "10", Nov => "11", Dec => "12");
$LZeit = $Jahr.$Monate{$Monat}.$Monatstag.".".$Stunden.$Minuten.$Sekunden;
$Logzeit = $Monatstag.".".$Monate{$Monat}.".".$Jahr." ".$Stunden.":".$Minuten.":".$Sekunden;
$ip = $ENV{'REMOTE_ADDR'};
$path = $ENV{'SCRIPT_FILENAME'};
if ( $path =~ tr/!|;\*~<>[]{}()$&#`// ) { die "Pfad ungültig"; }
@Pfad = split '/', $path;
$home = "/$Pfad[1]/$Pfad[2]/$Pfad[3]";
$public_path = "$home/public_html/$Pfad[5]";
$data_path = "$home/data/$Pfad[5]";
#---------------------------------------------------------
#---------------------------------------------------------
$Beschr = $cgi->param('beschreibung');
$Empf = $cgi->param('Empf');
$user = $cgi->param('usr');
$BeschrLength = "0";
require "$home/scripts/upload.pm";
Der eigentlich Upload findet dann in upload.pm statt,aber da springt er gar nicht mehr rein,wenn die Datei größer als 7,5kb ist!!!!!!!!
Viele Grüße,
Volker