Alexander: Problem mit Downloadskript

Beitrag lesen

Hallo,
ich benutze das folgende Downloadskript:

#!/usr/bin/perl -w

@allowed_domains = ("meinedomain.de","81.209.142.18");

$allow_bookmarking = "1";

$base_path = "Das Server-Vezeichnis";

$blocked_page = "http://www.meinedomain.de/blocked.htm";

$homepage = "http://www.meinedomain.de";

use CGI;
$query = new CGI;
$file = $query->param("file");
$referer = $ENV{'HTTP_REFERER'};

if ($base_path =~ /[^/]*/$/) { $base_path = $1; }

if (! $file || $file =~ /../ || $file =~ /// || $file =~ /|/ || $file !~ /[1]+(.[\w_.]+)?$/) { &error("Ungueltiger Dateiname."); }

if (!-e $base_path . "/" . $file) { &error("Die angeforderte Datei $file existiert nicht."); }

foreach $allowed_domain (@allowed_domains) {
if ($referer =~ m#^http://([^/]+.)?$allowed_domain#) { $good_referer = "1"; }
}
if ($allow_bookmarking && ! $referer) { $good_referer = "1"; }

if (! $good_referer) {
if ($blocked_page) { print "Location: $blocked_page\n\n"; }
if (! $blocked_page && $homepage) { &error("Diese Datei wurde vor direktem Verlinken geschuetzt.<br>Um die Datei herunterzuladen, folgen Sie bitte den Anweisungen der Homepage, <a href="$homepage">$homepage</A>."); }
if (! $blocked_page && ! $homepage) { &error("Diese Datei wurde vor direktem Verlinken geschuetzt.<br>Um die Datei herunterzuladen, folgen Sie bitte den Anweisungen der Homepage."); }
}

SWITCH:
{
$content_type = "audio/mpeg" and last if $file =~ /.mp3$/i;
$content_type = "image/jpeg" and last if $file =~ /.jpe?g$/i;
$content_type = "image/gif" and last if $file =~ /.gif$/i;
$content_type = "text/html" and last if $file =~ /.s?html?$/i;
$content_type = "text/plain" and last if $file =~ /.txt$/i;
$content_type = "application/x-zip-compressed" and last if $file =~ /.zip$/i;
}
if (! $content_type) { $content_type = "application/x-msdownload"; }

print "Content-type: $content_type\n\n";
open(FILE,"<$base_path/$file") || &error("Das Skript konnte $file\ nicht oeffnen.");
while (<FILE>) { print $_; }
close(FILE);

exit;

sub error {
$error = $_[0];
print "Content-type: text/html\n\n";
print <<"(end)";
<html>
<head>
<style type="text/css">
A:hover{color:#000000;}
</style>
</head>
<body><font face="verdana">
<b>Kein Zugriff moeglich</b><br>
<font size="-2">
$error<p>
file protection
</font>
</font>
</body>
</html>
(end)
exit;
}

#002

Nur, wenn jemand ZIP-Dateien herunterlädt funktioniert das Skript einwandfrei.
Sobald aber ein anderer Dateityp (exe, rar, gz...) heruntegeladen werden soll, erhält man eine Datei mit dem Namen "download.pl", die auch gleich im Browser geöffnet wird.

Wie kann ich dem Skript beibringen, die Dateien mit den richtigen Endungen zu speichern?

Vielen Dank schon mal für alle Tipps!


  1. \w_. ↩︎