2009-02-10 13 views
15

Chciałbym dodać funkcję "Pobierz ten plik" poniżej każdego filmu w jednej z moich witryn. Potrzebuję zmusić użytkownika do pobrania pliku, zamiast tylko do niego linkować, ponieważ czasami zaczyna on odtwarzać plik w przeglądarce. Problem polega na tym, że pliki wideo są przechowywane na oddzielnym serwerze.php - Jak wymusić pobranie pliku?

W jaki sposób mogę wymusić pobieranie w PHP?

+0

możliwe duplikat [Wymuszanie pobrania pliku za pomocą PHP] (http://stackoverflow.com/questions/1465573/forcing-to-download-a-file-using-php) – bummi

Odpowiedz

35

można spróbować coś takiego:

$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; 

Właśnie testowałem to i to działa na mnie.

Należy pamiętać, że aby readfile móc czytać zdalny adres URL, musisz mieć włączoną opcję fopen_wrappers.

+0

Pamiętaj tylko, aby przejść: str_replace ('"', '\\"', $ nazwa_pliku) Przed umieszczeniem w nagłówku –

+5

Wada polega na tym, że wszystkie wideo przebiegałyby przez jego serwer. Jeśli wideo znajduje się na oddzielnym serwerze ze względu na przepustowość, to rozwiązanie nie będzie akceptowalne. – Zoredache

+0

Punkt wzięty. Z brzmienia pytania miałem jednak wrażenie, że nie ma on dostępu do tego zdalnego serwera, w przeciwnym razie byłby to banalny problem. W takim przypadku, o ile mi wiadomo, byłoby to jedyne rozwiązanie. –

0

Spróbuj tego:

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

Kluczem jest header(). Musisz wysłać nagłówek wraz z pobranym plikiem i wymusi on okno dialogowe "Zapisz plik" w przeglądarce użytkownika.

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

przy użyciu tego kodu. czy można zapisać nazwę pliku do tego, co chcesz. na przykład masz URL: http://remoteserver.com/file.mp3 zamiast „plik.mp3” można użyć tego skryptu, aby pobrać ten plik jako „newname.mp3”

5

Testowane pliku download.php jest

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"); 

a link do pobieranie jest

<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

Proszę podać bardziej szczegółowy opis swojego rozwiązania. – clemens

Powiązane problemy