• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Downloads

Status
Für weitere Antworten geschlossen.

KillaH

Neues Mitglied
öhm hi
wiedermal ne frage
ich bräuchte ne datei wie man sich sachen downloaden kann
zb durch
download.php?test.mp3
oder i-wie so wenns geht vllt auch das man datein die nicht von der eigenen hp sind downloaden kann
download.php?http://......./test.mp3

danke schonmal ^^
 
also erstmal muss es sowieso
download.php?datei=test.mp3
heißen o.ä. es sei denn du kannst Mod_Rewrite benutzen

Ansonsten kannst du dir dafür einfach eine Datei anlegen download.php.
In dieser kannst du z.B. mit einem Switch arbeiten

Und das ist der Code um einen Download der Datei dann zu starten (-- Vohrher darf keinerlei Ausgabe sein --)
PHP:
<?php
$Datei = "PfadzurDatei/Dateiname.Dateiendung";
$Dateiname = basename($Datei);
$Größe = filesize($Datei);
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename={$Dateiname}");
header("Content-Length: {$Größe}");
readfile($Datei);
?>
 
also jezz spricht wieder der noob
wenn ich zb downloade.php?datei=4.jpg angebe öffnet sich dieses normale download fenster aber dort steht
möchsten sie die datie Dateiname.Dateienendung downloaden
muss ich da noch was in der script datei umschreiben?
 
ähm ja!

also bitte wenn du des net selber schaffst - ich kau dir das gerne vor
PHP:
<?php
if(!isset($_GET["datei"]))
{
  die ("Fehler - Parameterübergabe fehlt");
}
$download = true;
switch($_GET["datei"])
{
  case "4.jpg":
    $ordner = "./images";
    $Datei = $ordner."/".$_GET["datei"];
    $Dateiname = basename($Datei);
    $Größe = filesize($Datei);
  break;
  default:
    $download = false;
  break;
}
if($download)
{
  header("Content-Type: application/force-download");
  header("Content-Disposition: attachment; filename={$Dateiname}");
  header("Content-Length: {$Größe}");
  readfile($Datei);
}
else
  die("Datei nicht eingetragen");
?>
 
öhm ich weiß nich ob ichs falsch erklärt habe aber i-wie is das noch nie so wie ichs meine also ich erklärs nochmal
das ist diese kleine datei namens download.php
und in zb index.php hab ich ein link mit
download.php?datei=4.jpg und
download.php?datei=5.jpg
download.php?datei=6.jpg
also dass sich die downloaddatei nich auf eine spezielle andere dazei bezieht sonder je nachdem welche endung man nach datei= einfügt
sorry dass ich dir soviel arbeite mache ich kanns halt kein php :oops:
 
genau das was du jetzt erklärt hast macht das script - du öffnest die datei donwload.php und das was du mittels ?datei=xxx übergibst wird heruntergeladen
 
jetzt blick ichs aber auch nichtmehr...

PHP:
switch($_GET["datei"])
{
  case "4.jpg":
    $ordner = "./images";
    $Datei = $ordner."/".$_GET["datei"];
    $Dateiname = basename($Datei);
    $Größe = filesize($Datei);
  break;
  default:
    $download = false;
  break;
}
du sagst doch hier

wenn die endung "4.jpg" is dann mach das..wenn nicht dann $download=false;

und wenn false ist wird

PHP:
if($download)
ja auch nicht ausgeführt..

also funzt das script ja nur wenn er 4.jpg übergibt bei allem andere streikt es

so denk ich vielleicht denk ich auch falsch ?

EDIT: so vielleicht ?

PHP:
   <?php
if(!isset($_GET["datei"]))
{
  die ("Fehler - Parameterübergabe fehlt");
}
else
{
    $Dateiname = basename('./images/'.$_GET['datei']);
    $Größe = filesize($Datei);
    header("Content-Type: application/force-download");
    header("Content-Disposition: attachment; filename={$Dateiname}");
    header("Content-Length: {$Größe}");
    readfile($Datei);
}
 
Zuletzt bearbeitet:
nein eben nicht so - so wie du es geschrieben hast ist es viel zu unsicher weil man JEDE Datei runterladen könnte und somit auch auf alles zugriff bekommt. du kansnt dann z.b.
download.php?datei=../mysqldaten.php
öffnen und du hast z.b. die mysql zugangsdaten

deshalb muss man es so machen
dachte einfach es würde sich von selbst erklären durch den switch der drin is

also nochmal ... (alles muss man selber machen ;))

PHP:
   <?php
if(!isset($_GET["datei"]))
{
  die ("Fehler - Parameterübergabe fehlt");
}
$download = true;
switch($_GET["datei"])
{
  case "4.jpg":
    $ordner = "./images";
    $Datei = $ordner."/".$_GET["datei"];
  break;
  case "5.jpg":
    $ordner = "./images";
    $Datei = $ordner."/".$_GET["datei"];
  break;
  case "6.jpg":
    $ordner = "./images";
    $Datei = $ordner."/".$_GET["datei"];
  break;
  case "datei.exe":
    $ordner = "./images";
    $Datei = $ordner."/".$_GET["datei"];
  break;
  case "download.txt":
    $ordner = "./images";
    $Datei = $ordner."/".$_GET["datei"];
  break;
  /*
  * Und noch
  * viele
  * viele
  * viele
  * weitere Cases..
  * somit kann mann unendlichviele dateien nehemn
  * Wahlweise auch mit datenbank
  * verknüpfbar ^^
  */
  default:
    $download = false;
  break;
}
if($download)
{
  $Dateiname = basename($Datei);
  $Größe = filesize($Datei);
  header("Content-Type: application/force-download");
  header("Content-Disposition: attachment; filename={$Dateiname}");
  header("Content-Length: {$Größe}");
  readfile($Datei);
}
else
  die("Datei nicht eingetragen");
?>
 
Zuletzt bearbeitet:
dann muss er ja für jede datei en case mache was bei vielen downloads ziemlich große datei wird.

ich unterbreite einfach mal nen zweiten vorschlag einverstanden ? ;-)

PHP:
   <?php
if(!isset($_GET["datei"]))
{
  die ("Fehler - Parameterübergabe fehlt");
}
else
{
    $Datei = explode("/",$_GET['datei']);
    $last = count($Datei);
    $last--;

    $Dateiname = basename('./images/'.$Datei[$last]);
    $Größe = filesize($Datei);
    header("Content-Type: application/force-download");
    header("Content-Disposition: attachment; filename={$Dateiname}");
    header("Content-Length: {$Größe}");
    readfile($Datei);
}
das müsste soweit hinhauen...jetzt kann der user von miraus

datei=../../../../../../mysql.php schreiben wie er lustig is in $datei steht nur der dateiname

Gruß jan
 
Zuletzt bearbeitet:
sorry leute aber ich bin erst seit 3 wochen mit dem php scripten dranne und versteh noch so gut wie nix

bei der letzten lösung kommt folgendes raus
Fatal error: Call to undefined function: array() in /usr/export/www/vhosts/funnetwork/hosting/killahzone/download.php on line 12

das wäre diese reihe
$Dateiname = basename('./images/'.$Datei($last));
ich hab folgenden link benutzt
donwload.php?datei=favicon.ico und
donwload.php?datei=index.html
beides ging nicht :( könnt ihr euch vielleicht nochma dransetzen?
 
@pennywise
Einverstanden - find ich gut die lösung - gar net dran gedacht^^
naja man kann ja net an alles denken :)
 
wenn man schon trennzeichen benutzt, sollte man doch wenigstens darauf achten, das manche user windoof benutzen und dann auch deren seperator \

PHP:
<?php

if(!empty($_GET['datei']))
{
    $datei = str_replace(array('/','\\'), DIRECTORY_SEPARATOR, $_GET['datei']);
    preg_match_all("/".addslashes(DIRECTORY_SEPARATOR)."(.*)$/", $datei, $out);
    $datei = $out[1][0]
    
    // download zeuchs
}

?>

MFG Miah
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben