2016-04-06 5 views
-1

Ich bin auf der Suche nach Website-Benutzer können einfach Dateien (Audio), die wir auf einem Remote-Hosting-Service haben herunterladen.PHP-Skript zum Herunterladen von Dateien von einem Remote-URL auf den Computer des Benutzers direkt

Wir haben URLs, die auf diese Dateien zeigen. Die Dateien werden nicht auf derselben Site oder demselben Server wie die Hauptwebsite gespeichert.

Zur Zeit haben wir Links, die auf diese Dateien verweisen, und Text, der den Site-Benutzer anweist, mit Rechtsklick zu klicken und "Datei speichern unter" zu wählen, um diese Dateien auf ihren lokalen Rechner herunterzuladen.

Um dies ein wenig benutzerfreundlicher zu machen, wäre es viel besser, wenn ein Benutzer der Site einfach auf einen Link klicken und ein Skript haben könnte, das die Datei herunterladen würde.

Ist das möglich?

Nachdem dies untersucht wurde, gibt es viele Online-Beispiele und SO-Fragen zum Herunterladen von Dateien auf demselben Server oder zum Herunterladen von URLs auf Ihren Server.

Das wollen wir hier nicht machen. Wir möchten keine dieser Dateien vom Remote-Hosting-Service auf den Haupt-Webserver kopieren.

Dies ist für einen Site-Benutzer, der auf einen Link klickt und über die Remote-URL die Datei direkt auf den lokalen Computer des Benutzers und nicht auf den Server herunterlädt.

+0

Was passiert, wenn Sie einfach auf Ihren bestehenden Link klicken? –

+0

Was ist das Problem des Benutzers, wenn er auf einen Link in der Remote-URL klickt und der Hosting-Service einfach die richtigen Header sendet, um den Download zu starten? – Federkun

+0

Wir haben keine Kontrolle über den Remote-Hosting-Server, nur die Hauptwebsite. Wenn Sie auf die Datei klicken, wird versucht, im Browser des Benutzers zu spielen. Das müssen wir nicht tun. Diese Links müssen "Download" -Links sein, damit der Benutzer die Datei auf seinen Computer herunterladen und nicht abspielen kann. – Richard

Antwort

2

Sie können dies erreichen, indem Sie den folgenden PHP:

$file_name = $_GET['filename']; 
$file_url = 'http://path_to_audio_folder.com/' . $file_name; 
header('Content-Type: application/octet-stream'); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"".$file_name."\""); 
readfile($file_url); 
exit; 

Man könnte es dann von Ihrem Skript aufrufen wie: download.php?filename=my_song.mp3 und es würde als Download auf Ihre Besucher darauf klicken gezwungen werden.

+0

Dies ist eine schöne, einfache Lösung und funktioniert gut. Vielen Dank! – Richard

+0

Können wir den Namen der Datei ändern? – Nerazzurri

+0

@VermaJr. Könntest Du das erläutern? Wenn Sie 'filename = my_song.mp3' meinen, werden alle MP3-Dateinamen verwendet, sofern sie in Ihrem Verzeichnis vorhanden und öffentlich sind. – Ryan

1

Sie können eine "Proxy-Seite" erstellen. Ihr Server laden Sie die Datei herunter und unterdessen senden Sie die Daten an Ihren Endbenutzer. Der einfachste Weg, dies zu tun, ist die Datei in Chunks Ausgabe:

$url = 'http://.....mp3'; 

header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename='.basename($url)); 
header('Content-Transfer-Encoding: chunked'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 

$stream = fopen('php://output', 'w'); 

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_READFUNCTION, function($ch, $fd, $length) use ($stream) { 
    return fwrite($stream, fread($fd, $length)); 
}); 

curl_exec($ch); 
curl_close($ch); 

Chunked Content-Transfer-Encoding der Client die Datei zu übertragen beginnen kann, bevor das Content-Length Gebiet bekannt ist. Dadurch muss der Benutzer nicht warten, bis der Server die Datei vollständig heruntergeladen hat, bevor er den Download startet.

+0

Entschuldigung können Sie mir helfen: Ich brauche etwas, das Datei herunterlädt und sendet es an den Benutzer und löscht den heruntergeladenen Stream vom Server. weil ich in meinem Server-Verzeichnis begrenzten Speicherplatz habe –

Verwandte Themen