# Download - url verstecken



## Bluebird (21. April 2002)

Ich habe schon mal gelese, dass man mittels php Downloads direkt durchführen kann.
normaler weg: url per öffnen im fenster an browser übergeben und der läd die datei dann runter
Weg, den ich meine: ein php script übergibt die adresse für die datei direkt an den browser ohne, dass dabei die url bekannt wird oder anders ausgelesen werden kann...

leider finde ich den artikel dazu nicht mehr...


----------



## Matthias Reitinger (21. April 2002)

Nun ja, das ist eigentlich ganz einfach. Man muss z.B. eine MySQL-Tabelle anlegen, in der jedem Download eine eindeutige ID zugewiesen wird. Über diese ID findet man dann im Script den tatsächlichen Dateinamen raus. Dann muss man nur noch die richtigen Header senden und die Datei ausgeben.

Hm, ich schreib lieber mal kurz nen Beispielcode:

```
<?
if (!isset($id)) die(); // wenn keine ID angegeben ist, Script abbrechen

mysql_connect(); // ...
mysql_select_db("blablub"); // ...

$result = mysql_query("SELECT filename FROM downloads WHERE id = '$id'"); 
$filename = mysql_result($result, 0); // Dateiname aus der DB holen

header("Content-Disposition: filename=\"$filename\""); // Dateiname
header("Content-Length: ".filesize($filename)); // Dateigröße
header("Content-Type: application/octet-stream"); // MIME-Typ

readfile($filename); // Ausgabe
?>
```

HTH

reima


----------



## Bluebird (21. April 2002)

danke. ich glaube die header übergabe war das was ich gesucht habe....


----------



## Feldhofe (21. April 2002)

Ganz blöde Frage: Wozu braucht man sowas??

Feldhofe


----------



## Bluebird (21. April 2002)

stell dir mal vor du hast nen server mit 50 GB traffic frei im Monat. Und ne Datei mit 20 MB und 3000 Leute laden die runter, weil irgendwer die datei in seine Mirrorlist gepackt hat 
das macht nach adam riese 60 GB Traffic....na und das das ******e ist, kannst du dir ja vorstellen
die 2. Möglichkeit ist, dass du ne bestimmte datei nur bestimmten angemeldeten Mitgliedern zugänglich machen willst....dann kann die url ja nicht öffentlich sein....

edit: hier hab ich das nochmal gefunden: http://www.bme.ie/index.php?m=PHP-APP-DL&language=de&display=bmebdy
wenn man wiede weiß wonach man sucht


----------



## Feldhofe (22. April 2002)

stimmt, klingt einleuchtend...


----------



## karuna (12. Juni 2004)

hi könnte jemand mir mal so eine datei senden damit ich nur noch die adresse und so ändern muss ..
e-mail: pkgamefun@hotmail.com

wäre sehr nett von euch
Thx


----------



## low-group (12. Juni 2004)

Das ganze wird eh nicht so viel bringen, da man mittels DL-Manager den Link dann trotzdem wieder sieht.


----------



## Gumbo (12. Juni 2004)

Welcher Link ist denn mittels Downloadmanagern sichtbar?


----------



## _voodoo (12. Juni 2004)

Der zur Datei.

Link auf Website: http://www.url.de/down.php?ID=543
Link zur Datei: http://www.url.de/ordnerhier/ordnerda/datei.zip
Der erste wird auf der Page übergeben und der zweite steht dann im normalerweise im Downloadmanager.


----------



## Gumbo (13. Juni 2004)

Dies ist aber nur möglich, wenn das Skript auf eine externe Datei _verweist_.


----------



## JohannesR (14. Juni 2004)

Man muss nur den Content-Disposition-Header auf einen netten Wert setzen (z.B. den Dateinamen, und nicht den Pfad zur Datei + Dateiname) und schon ist es "sicher".


```
$path = explode("/", $filename);
$file = $path[count($path) - 1];
header("Content-Disposition: filename=\"$file\""); // Dateiname
```


----------



## tomate (5. August 2004)

Hallo zusammen,

habe da zu dem Mime-Typ noch eine Frage.  Ich habe festgestellt, daß die Sache nicht mit dem IE4 funktioniert.
Mit dem Mime-Typ "application/octet-stream" zeigt der IE4 nur wirre Zeichen auf dem Bildschirm an. Und mit dem Mime-Type "Content-Type: x-type/subtype" erscheint die Meldung "Es steht kein Viewer für diesen Objekttyp zur Verfügung.
Möglicher Ort: Microsoft ActiveX Gallery..."

Kennt das Problem jemand und vor allem, wie kann ich es umgehen?

Viele Grüsse
tomate


----------



## KoMtuR (5. August 2004)

Wie wärs wenn man da vielleicht mal das Tutorial liest was zufällig hier auf der Seite zu Verfügung steht 

http://www.tutorials.de/tutorials25850.html


----------



## Bluebird (5. August 2004)

schau mal auf das Datum des Tutorials, dass du da verlinkt hast (November 2002) und dann auf das Datum meines Posts: April 2002 

hab das Problem damals dann über das senden eines passenden headers gelöst..


----------



## KoMtuR (5. August 2004)

Oh 

Naja ich hab einfach die letzten Zeilen gelesen. Nehmen wir einfach an, ich hab es an den über mir gerichtet


----------



## tomate (5. August 2004)

besten Dank für den Link. Muss beim Nächsten mal besser die Augen auf machen.
Dennoch funktioniert die Sache mit dem IE4 noch immer nicht. Kannst Du (Bluebird) mir sagen, mit welchem "header" Du das Problem lösen konntest?

Viele Grüsse
tomate


----------



## Bluebird (6. August 2004)

siehe 2. Post in diesem Thread. Das hat eigentlich sehr gut funktioniert...


----------



## tomate (6. August 2004)

Also bei mir funtioniert der mime-type "application/octet-stream" mit allen Browsern ausser dem IE4. Der zeigt mir mit diesem mime-type nur Zeichenwirrwarr auf dem Bildschirm an. Sogar mit dem buggy NC4.73 geht es. Ich werd noch verrückt....

Also bei Dir hat es mit dem IE4 und dem mime-type "application/octet-stream"  ganz sicher funktioniert? Das muss ich genau wissen, damit ich nicht in eine endlose Fehlersuche verfalle.

Und noch was ist mir aufgefallen. Der ganze Aufwand die URL zu verstecken hat zumindest bei allen IE's einen Hacken. Solange das Dokument nämlich geladen wird, zeigen alle IE's den kompletten Pfad unten in der Statuszeile an. Somit ist es ein leichtes, die ganze Geschichte zu umgehen. Oder sehe ich das falsch...?

Viele Grüsse
tomate


----------



## Gumbo (6. August 2004)

Was, bitte, ist der &bdquo;_NC4.73_&ldquo;?


----------



## tomate (6. August 2004)

NC4.73 ist der Netscape Communikator Version 4.73.
Laut Statistik zwar nur noch zu 0,4% im Umlauf und dennoch trifft man immer wieder auf Benutzer mit diesem Steinzeitbrowser.

Viele Grüsse
tomate


----------



## tomate (18. August 2004)

Hallo zusammen,

habe leider noch immer Probleme mit dieser Downloadgeschichte.

1. Ich habe festgestellt, dass der IE ab Ver. 6.0 einen Fehler ausgibt, sobald man auf den Speicher-Knopf drückt. Mit dem IE 5.0 funktioniert es einwandfrei. Was hat Microsoft da an den Sicherheitseinstellungen gedreht?

2. Der Firefox (0.9.2) wirft gar eine ganz kryptische Fehlermeldung aus: "Fehler: uncaught exception: [Exception... "Component returned failure code: 0x80004002 (NS_NOINTERFACE) [nsISupports.QueryInterface]"  nsresult: "0x80004002 (NS_NOINTERFACE)"  location: "JS frame :: chrome://global/content/alerts/alert.js :: prefillAlertInfo :: line 69"  data: no]"
Was zum Teufel ist das denn...?

3. Und zum Schluss. Der ganze Aufwand die URL zu verstecken hat zumindest bei allen IE's einen Hacken. Solange das Dokument nämlich geladen wird, zeigen alle IE's den kompletten Pfad unten in der Statuszeile an. Somit ist es ein leichtes, die ganze Geschichte zu umgehen. Oder sehe ich das falsch...?

Und das ist der kleine Codeblock:

```
header("Content-Type: application/force-download");
header("Content-Length: ".filesize($dateiname));
header("Content-Disposition: attachment; filename=".$datei[$_GET[was]]);
readfile($dateiname);
```

Kann mir da bitte jemand weiterhelfen...!

Viele Grüsse
tomate


----------

