Download ohne Linkanzeige
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anpassen
aufruf
beispiel
browser
code
datei
disposition
download
file
header
jemand
notwendig header
ordner
pfad
problem
type
url
versuchen
zeichen
zeile
-
Hallo zusammen!
Ich tüftel nun schon seit einiger Zeit an einem Problem. Ich möchte Dateien, die ich hier auf einem Downloadserver hochgeladen habe, Usern, die quasi eine Kopie davon gekauft haben (eBook), zum Download zur Verfügung stellen. Allerdings wird dabei ja immer der komplette Link angezeigt, sodass man diesen problemlos weitergeben kann und auch an alle anderen Dateien auf dem Downloadserver findet. Gibt es eine Möglichkeit, dass eben nicht der komplette Link angezeigt wird, sondern vielleicht nur der Name der Datei? Online wurde ich einfach nicht fündig und all meine Versuche schlugen fehl.
Liebe Grüße
Betty -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich habe das so hin gekriegt:
<?php $filename = 'file.zip'; $filesize = filesize($fileName); //Header("Content-Type: application/pdf"); //Könntest du noch anpassen, aber nicht notwendig Header("Content-Length: ".$filesize); Header("Content-Disposition: attachment; filename=".$fileName); @readfile($fileName); ?>
Einfach den file Namen abändern und dann sollte der Download direkt starten, ohne, dass jemand den Pfad kennt, nur den Namen.
Beitrag zuletzt geändert: 16.5.2014 20:06:33 von c143 -
Ah, klasse, das probiere ich doch gleich mal aus. Danke schon mal. ;)
Edit: Nee, ich raffs nicht. Da passiert irgendwie gar nichts bzw. ich weiß nicht, wie ich mit dem Code umzugehen habe, wo ich den einbauen muss, damit er startet bzw. der Download startet. Es wird im Endeffekt nur wieder genauso, wie ich es zuvor auch schon gemacht habe und der Link wird angezeigt. :(
Beitrag zuletzt geändert: 16.5.2014 20:29:17 von cam -
Hi!
c143 schrieb:
Ich habe das so hin gekriegt:
<?php $filename = 'file.zip'; $filesize = filesize($fileName); //Header("Content-Type: application/pdf"); //Könntest du noch anpassen, aber nicht notwendig Header("Content-Length: ".$filesize); Header("Content-Disposition: attachment; filename=".$fileName); @readfile($fileName); ?>
Einfach den file Namen abändern und dann sollte der Download direkt starten, ohne, dass jemand den Pfad kennt, nur den Namen.cam schrieb:
Ah, klasse, das probiere ich doch gleich mal aus. Danke schon mal. ;)
Edit: Nee, ich raffs nicht. Da passiert irgendwie gar nichts bzw. ich weiß nicht, wie ich mit dem Code umzugehen habe, wo ich den einbauen muss, damit er startet bzw. der Download startet. Es wird im Endeffekt nur wieder genauso, wie ich es zuvor auch schon gemacht habe und der Link wird angezeigt. :(
Ich verstehe nicht, was du jetzt gemacht hast. Ich habe das auch einmal so geregelt und es hat super geklappt. Auf der Downloadseite verlinkst du nicht auf die Datei, sondern auf download.php. In der steht der Code von c143:
<?php $fileName = 'file.zip'; $filesize = filesize($fileName); //Header("Content-Type: application/pdf"); //Könntest du noch anpassen, aber nicht notwendig Header("Content-Length: ".$filesize); Header("Content-Disposition: attachment; filename=".$fileName); @readfile($fileName); ?>
Ach ja, die erste Variable habe ich in fileName umbenannt.
MfG. Simon D. -
Ich glaube, mein Problem liegt einfach darin, dass ich nicht weiß, wohin dieser Code gehört. Ich habe ja nun zweimal filename (ob nun groß oder klein, soll erst mal dahingestellt sein):
1. den allgemeinen Pfad zum bestimmten Downloadordner
2. die Datei an sich, die aus Variablen besteht (Buchtitel - Autor .epub / .mobi ...)
Wenn ich nun aber den Link auf filename setze, wird der Link wieder angezeigt. Lege ich den Krims auf die Downloadseite, nachdem man auf den Link klickt, passiert nichts außer einer leeren Seite. :/ -
Hallo,
habe dieses Tutorial für Dich gefunden, einfach durcharbeiten und versuchen umzusetzen.
Wichtig ist, dass Du das Script (welches Du Dir erstellen musst) auf den Webspace hochlädst und in diesem Fall dann das Array $files mit den Dateinamen auf dem Downloadserver füllst...
<?php /* * Der Ordner indem sich die Dateien befinden */ $download_dir = "http://download.lima-city.de/cam/"; /* * Die herunterladbaren Dateien: */ $files = array( "1" => "test.html", "2" => "text.txt", "3" => "doc.pdf", "4" => "bild3.jpg", );
-
cam schrieb:
Ich glaube, mein Problem liegt einfach darin, dass ich nicht weiß, wohin dieser Code gehört.
Das verwundert nicht. C143 hat ein (evetuell) funktionierendes, rudimentäres Beispiel, für den Download einer einzelnen Datei Namens file.zip, aufgezeigt und ging wohl von Grundkenntnissen der PHP-Nutzung aus. Wenn Du dieses Beispiel z.B. unter download.php speicherst und deinen Besuchern als Downloadlink für file.zip anbietest, sind deine Anforderungen aus den Anfangsbeitrag des Threads erfüllt.
Die Zeile
//Header("Content-Type: application/pdf"); //Könntest du noch anpassen, aber nicht notwendig
ist aber, entgegen seiner Aussage durchaus wichtig... aber leider auch falsch! Fehlt diese, haben einige Browser das Problem, den Download richtig zu erkennen. Nutzt Du die Zeile wie angegeben, funktioniert sie aber NUR mit Dateien im PDF-Format. Dumm gelaufen, denn sein Beispiel zeigt den Download einer Zip-Datei. ^^ Universell, wenn es nicht nur unbedingt um PDFs geht, sollte man, statt "application/pdf" eher "application/octet-stream" verwenden. Damit wird dem Browser gezeigt, daß er, unabhängig von speziellen Dateiformaten, eine beliebige Datei im Binärformat zu erwarten hat.
Beitrag zuletzt geändert: 17.5.2014 3:10:17 von fatfreddy -
Wie fatfreddy schon gesagt hat, bin ich von PHP Kenntnissen ausgegangen. Ich liefre hier Lösungsansätze, keine kompletten Scripts. Aber er hat mich grad noch auf was hingewiesen, deshalb hier noch verbessert:
<?php $filename = 'file.zip'; $filesize = filesize($fileName); Header("Content-Type: application/octet-stream"); Header("Content-Length: ".$filesize); Header("Content-Disposition: attachment; filename=".$fileName); @readfile($fileName); ?>
Hab sowas noch nie gebraucht, deshalb war mir nicht klar, dass das wichtig ist. Aber kurze Erklärung:
Die Zeile, die ich geändert habe, sagt dem Browser, was für ein Filetype das ist. Ich hatte das in meinem Beispiel einfach mal auf PDF und hab den Filenamen auf file.zip geändert, was sicher zu Verwirrung gesorgt hat. Jetzt hat fatfreddy das abgeändert, dass das Format allgemein passt.
So, jetzt zum wichtigen Teil. Mein Script ist ein Beispiel wie man das löst, ganze infach habe ich das mit einer Datei gelöst. Dabei ging es mir nur darum, dass dus mal siehst und verstehst. Natürlich musst du das dann auf deine Bedürfnisse anpassen.
In diesem Fall sind es mehrere Dateien, richtig? Das kannst du jetzt selbst entscheiden, wie du das machst. Ich würd das folgendermassen lösen: Du speicherst alle Dateien in einen Ordner, zum Beispiel
./downloads/zahlpflichtig/6378/
Jetzt ändre ich das mal im PHP Script ab:$filename = '/downloads/zahlpflichtig/6378/';
Jetzt sind wir erst beim Ordner, das funktioniert noch nicht! Jetzt könntest du die Variable per GET einlesen.
Also mal angenommen deine .php Datei für die Downloads heisst download.php. Dann wär das dann so:
download.php?file=Filenamen. Das kennst du doch sicher schon, oder nicht? So wird das im Browser eingegeben, oder kann von dir verlinkt werden, ganz einfach.
Du machst z.B. ganz normale hrefs:
<a href="/download.php?file=File1.exe">File1</a> <a href="/download.php?file=File2.png">File2</a> <a href="/download.php?file=File3.zip">File3</a>
Und jetzt kannst du immer im Link angeben, welche Datei es sein soll. Also File1, File2 usw sind die Dateinamen.
Aber wie schon gesagt, wir haben das ganze erst auf den Ordner geändert, der Filename fehlt noch! Machen wir das noch. Also die Variable, die wir über den Link auslesen können ist in diesem Falle$_GET['file'];
Das ganze Script sieht also so aus:
<?php $filename = '/downloads/zahlpflichtig/6378/'.$_GET['file']; $filesize = filesize($fileName); Header("Content-Type: application/octet-stream"); Header("Content-Length: ".$filesize); Header("Content-Disposition: attachment; filename=".$fileName); @readfile($fileName); ?>
Jetzt musst du nur dein Ordner anpassen und die Links so gestalten, dann sollte das funktionieren. -
Hallo!
Sorry, dass ich erst jetzt wieder antworte, ich hatte in der letzten Zeit keine Zeit, mich wieder mit diesem Thema zu beschäftigen.
Allerdings funktioniert der Download an sich immer noch nicht. Zwar sieht die Linkadresse nun supi aus, aber die Datei öffnet sich leider nicht - also das Fenster, wo man dann auf "öffnen", "speichern" etc. klicken muss, um sich die Datei auf den PC etc. zu laden. Fehlt in dem Code noch etwas? Denn es öffnet sich einfach nur die download-Seite mit geändertem Link und sonst nichts. :/
Liebe Grüße -
Wie sieht denn der Quelltext der Seite aus, die ausgegeben wird?
(mit Firefox z. B. Rechtsklick + Seitenquelltext anzeigen)
Du kannst ja auch mal den kompletten Link und den ganzen verwendeten Code hier reinstellen. -
Ebenfalls möglich wäre ein Downloadkey der beim Kauf generiert wird.
Erst überprüfen lassen ob der User die Datei schonmal gekauft hat, wenn ja einen key generieren. Dieser wird einfach in der Datenbank inkl. Download URL abgelegt.
Alternativ kannst du diesen dann auch noch eine Zeitbegrenzung geben, sodass der Key nach einer gewissen Zeit nicht mehr geht.
Beispiel:
<?php $download_key = zufallsstring(10); $time = time(); // Zufalls Key Generator function zufallsstring($laenge){ $zeichen = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $zufalls_string = ''; $anzahl_zeichen = strlen($zeichen); for($i=0;$i<$laenge;$i++){ $zufalls_string .= $zeichen[mt_rand(0, $anzahl_zeichen - 1)]; } return $zufalls_string; } /// wenn Bereitsgekauft dann: ///Eintragen Der Download URL $downloadurl = $row->downloadurl; $db->query("INSERT INTO download_links(download_key,downloadurl,time) VALUES ('$download_key','$get_download_info_row->downloadurl','$time')"); /// Download Informationen Erhalten $get_download_info_download = $db->query("SELECT * FROM downloads WHERE titel = '$Download_name'"); $get_download_info_row_download = $get_download_info_download->fetch_object(); /// Überprüfung ob ein Key Vorhanden ist $download_key = mysqli_real_escape_string($db, $_GET['key']); if(!isset($_GET['key']) or empty($_GET['key'])){ echo "Fehler mit der Downloadschlüssel übermittlung. Bitte versuchen Sie es erneut!"; exit(); } /// Überprüfung des Keys mit der Datenbank $check_key = $db->query("SELECT * FROM download_links WHERE downloadurl = '$get_download_info_row_download->downloadurl' AND download_key = '$download_key'"); $check_key_row = $check_key->fetch_object(); /// Überprüfung ob der Key noch gültig ist if($time - $check_key_row->time > 120){ echo " <span style=\"text-align:center;\"> Downloadlink abgelaufen oder nicht mehr vorhanden! <br />$get_download_info_row->downloadurl <input type=\"button\" onclick=\"window.location.href = '/Get_File.php?downloadname=$Download_name&action=view'\" value=\"Zurück zur Download Ansicht\"> </span>"; exit(); }else{ /// Aufrufe + 1 $db->query("UPDATE downloads SET aufrufe = aufrufe+1 WHERE titel=$Download_name"); ?>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage