perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 25
Click for quality!




10.02.2012 / 21:23

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  CGI: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragDateiübergabe an Webbrowser (Download-Script)
Seitenanfang
Hallo!

Ich wende mich (mal wieder ;-) mit einem Problem an Euch, welches ich nicht schaffe selbst zu lösen.

Ich liefere einige Downloads auf unserer Webseite per Perl/CGI-Script aus, da aus Sicherheitsgründen die Dateien in einem Verzeichnis liegen, das vom Webserver nicht zugänglich sind.

Das Ganze mache ich heute so:

(Bsp. gekürzt)


#!/usr/bin/perl

$file = $query{'file'};

if (-e "$pathfiledepot/$file") {
open(F,"<$pathfiledepot/$file") || die "Missing file/dir.";
flock(F,2) if($flock);
binmode(F);
print "Content-Type: application/octet-stream\n\n";
print <F>;
flock(F,8) if($flock);
close(F);
exit;
}

Das funktioniert mit kleineren Dateien auch sehr gut, aber sobald es sich um größere Dateien (z.B. 300 MB) handelt, geht der Server in die Knie.

Getestet habe ich das Ganze zu Hause unter Windows Vista/Apache mit einer 1 GB-Datei: Der Speicherverbrauch steigt um gut 1-2 GB und die CPU-Usage geht auf 100% für mehrere Sekunden/Minuten. Dann startet der Download im Browser. Auf meinem Webserver geht garnichts und der Download bricht sofort mit einem "Serverfehler" ab - ich vermute, dass der Server das CGI/Perl-Skript abbricht, weil der Recourcenverbrauch zu hoch ist.

Ich denke, dass das Perlskript zunächst die komplette Datei in den Speicher lädt und erst dann an den Browser weitergibt.

Nun die Gretchenfrage: Wie realisiert man denn so ein Downloadskript "richtig"?

Ich stelle mir das so vor, dass das Perlscript die Datei nicht vollständig öffnet, sondern einfach "Zeile für Zeile" einliest und an den Browser weitergibt.

ich hoffe mir kann jemand weiterhelfen!

Danke,
Michael

Datum: 14.12.2009-19:45

Beitragre: Dateiübergabe an Webbrowser (Download-Script)
Seitenanfang
Ich habe die Lösung hier im Forum in einem Thread zur Auslieferung von Bildern an den Browser gefunden:


open my $fh => "$pathfiledepot/$file" or die "Missing file/dir. Please contact $emailadmin";
flock(F,2) if($flock);
print "Content-Type: application/octet-stream\n\n";
binmode $fh;
while(read $fh, my $buffer, 1024) {
print $buffer;
}
flock(F,8) if($flock);
close(F);

Danke,
Michael

Datum: 15.12.2009-06:52

-






-
-