2009-02-10 11 views
15

Ich möchte eine Funktion "Diese Datei herunterladen" unter jedem Video auf einer meiner Websites hinzufügen. Ich muss den Benutzer zwingen, die Datei herunterzuladen, anstatt nur darauf zu verlinken, da das manchmal eine Datei im Browser spielt. Das Problem ist, die Videodateien werden auf einem separaten Server gespeichert.php - Wie erzwinge den Download einer Datei?

Irgendwie kann ich den Download in PHP erzwingen?

+0

möglich Duplikat [Erzwingen einer Datei mit PHP zum Download] (http://stackoverflow.com/questions/1465573/forcing-to-download-a-file-using-php) – bummi

Antwort

35

Man könnte so etwas wie dies versuchen:

$file_name = 'file.avi'; 
$file_url = 'http://www.myremoteserver.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; 

ich es getestet und es funktioniert für mich.

Bitte beachten Sie, dass für readfile in der Lage, eine Remote-URL zu lesen, müssen Sie Ihre fopen_wrappers aktiviert haben.

+0

Denken Sie daran, zu gehen: str_replace ('' ',' \\ "', $ datei_name) Bevor Sie es in den Header setzen –

+5

Der Fehler mit diesem ist, dass das ganze Video über seinen Server laufen würde. Wenn sich das Video aus Gründen der Bandbreite auf einem separaten Server befindet, ist diese Lösung nicht akzeptabel. – Zoredache

+0

Punkt genommen. Aus dem Ton der Frage habe ich jedoch den Eindruck, dass er keinen Zugriff auf diesen Remote-Server hat, sonst wäre es ein triviales Problem. Wenn das der Fall ist, wäre das, soweit ich weiß, die einzige Lösung. –

0

Versuchen Sie folgendes:

<?php 
$FileName = '/var/ww/file.txt'; 
header('Content-disposition: attachment; filename="'.$FileName.'"'); 
readfile($FileName); 

Der Schlüssel ist die header(). Sie müssen die Kopfzeile zusammen mit dem Download senden und erzwingen den Dialog "Datei speichern" im Browser des Benutzers.

0
<?php 
$FileName = '/var/ww/file.txt'; 
header('Content-disposition: attachment; filename="'.$FileName.'"'); 
readfile($FileName); 

mit diesem Code. ist es möglich, den Dateinamen zu speichern, was Sie wollen. Sie zum Beispiel url haben: http://remoteserver.com/file.mp3 statt „file.mp3“ können Sie dieses Skript verwenden, um die Datei als „newname.mp3“ ist

function _Download($f_location, $f_name){ 
    $file = uniqid() . '.pdf'; 

    file_put_contents($file,file_get_contents($f_location)); 

    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Length: ' . filesize($file)); 
    header('Content-Disposition: attachment; filename=' . basename($f_name)); 

    readfile($file); 
} 

_Download($_GET['file'], "file.pdf"); 

und der Link

5

Getestet download.php Datei zum Download Download ist

<a href="download.php?file=http://url/file.pdf"> Descargar </a> 
0
<?php 

    $file_name = 'video.flv'; 
    $file_url = 'http://www.myserver.com/secretfilename.flv'; 
    header('Content-Type: application/octet-stream'); 
    header("Content-Transfer-Encoding: Binary"); 
    header("Content-disposition: attachment; filename=\"".$file_name."\""); 
    echo file_get_contents($file_url); 
    die; 

?> 
+0

Bitte geben Sie eine detailliertere Beschreibung Ihrer Lösung an. – clemens

Verwandte Themen