Download nur mit Session
Tomm
- programmiertechnik
Moin,
mit einem Text geht das ja ganz einfach, ihn nur ausgeben, wenn eine Session gültig ist:
if (Session...) { Text... }
Wie kann man nun eine beliebige Datei nur dann zum Download anbieten, wenn eine Session gültig ist (oder man mit einer passenden Get-Variable ankommt)? Da kann ich ja keinen Code reinschreiben?
Danke, Tom
Hi,
Wie kann man nun eine beliebige Datei nur dann zum Download anbieten, wenn eine Session gültig ist (oder man mit einer passenden Get-Variable ankommt)? Da kann ich ja keinen Code reinschreiben?
die Datei muss über ein serverseitiges Script ausgelesen und zur Ressource gemacht werden.
Cheatah
Moin Cheatah,
die Datei muss über ein serverseitiges Script ausgelesen und zur Ressource gemacht werden.
Also sie liegt in einem nicht zugänglichen Verzeichnis, wird dann vom Script eingelesen und ausgegeben?
Wenn es sich um ein ZIP-Archiv handelt, muss das Script auch *.zip heissen, oder? Und der Server muss es trotzdem als z.B. PHP-Script parsen. Oder hab ich das falsch verstanden?
Danke, Tom
Hi,
Also sie liegt in einem nicht zugänglichen Verzeichnis, wird dann vom Script eingelesen und ausgegeben?
genau.
Wenn es sich um ein ZIP-Archiv handelt, muss das Script auch *.zip heissen, oder?
Sowohl URL als auch Dateiname sind irrelevant. Allenfalls den IE könntest Du verwirren; alle anderen Clients richten sich nach dem HTTP-Standard, also nach dem gesendeten Content-Type.
Cheatah
Hello,
Wie kann man nun eine beliebige Datei nur dann zum Download anbieten, wenn eine Session gültig ist (oder man mit einer passenden Get-Variable ankommt)? Da kann ich ja keinen Code reinschreiben?
#-----------------------------------------------------------------
function sendscript($path, $filename)
{
$filename = basename($filename);
$filepath = $path."/".$filename;
$len = filesize($filepath);
$fh = @fopen($filepath,"r");
if (!$fh) return false;
$data = fread($fh, $len);
fclose($fh);
header("Content-Type: text/plain");
header("Content-Disposition: attachment; filename="$filename"");
header("Accept-Ranges: bytes");
header("Content-Length: $len");
echo $data;
return true;
}
#-----------------------------------------------------------------
Bisher hatte das so (oder so ähnlich) immer funktioniert. Vorhin
hat die Funktion allerdings gemuckt. Kann aber auch sein, dass
die DoS-Attacke auf das Script http://bitworks.de/~selfHTML/speichern.php daran Schuld war.
Da fehlten nämlich noch die @ vor den Filefunktionen...
Liebe Grüße aus http://www.braunschweig.de
Tom
Moin Tom,
Tom
Ah, wegen Dir muss ich mich Tomm nennen?! ;-)
Danke für den Code, ich werde das mal ausprobieren.
Grüße, Tom
Hello,
Ah, wegen Dir muss ich mich Tomm nennen?! ;-)
Nö, Du kannst Dich auch tommy nennen oder Hansdampf ;-))
Danke für den Code, ich werde das mal ausprobieren.
Da habe ich gerade nochmal dran gebastelt, weil die alte Funktion auf meinem Testserver immer diesen merkwürdigen Fehler ausgelöst hat, dass der Browsser den HTTP-Header angezeigt hat.
#--------------------------------------------------------------------
function sendscript($path, $filename)
{
## ggf. anpassen, wenn Files aus anderen Directories
## als dem aktuellen gelesen werden sollen
$filename = basename($filename);
$filepath = $path."/".$filename;
$len = filesize($filepath);
$fh = @fopen($filepath,"r");
if (!$fh) return false;
$data = fread($fh, $len);
fclose($fh);
$header = "";
$header .= "Content-Type: text/plain\r\n";
$header .= "Content-Disposition: attachment; filename="$filename"\r\n";
$header .= "Accept-Ranges: bytes\r\n";
$header .= "Content-Length: $len\r\n";
header($header);
echo $data;
return true;
}
#--------------------------------------------------------------------
So funktioniert es auf allen zur Verfügung stehenden Servern und PHP-Versionen ohne den Fehler. Verstanden habe ich das aber nicht. Dazu müsste ich in den HTTP-Stream reinschauen können.
In dem Speicher-Script habe ich das auch entsprechend geändert und es funktioniert, was ja nicht unbedingt was zu sagen hat :-(
Liebe Grüße aus http://www.braunschweig.de
Tom