2009-02-10 37 views
15

Tôi đang tìm cách thêm chức năng "Tải xuống tệp này" bên dưới mỗi video trên một trong các trang web của tôi. Tôi cần buộc người dùng tải xuống tệp, thay vì chỉ liên kết với tệp đó, vì điều đó đôi khi bắt đầu phát tệp trong trình duyệt. Vấn đề là, các tập tin video được lưu trữ trên một máy chủ riêng biệt.php - Làm cách nào để tải xuống tệp?

Bất kỳ cách nào tôi có thể bắt buộc tải xuống bằng PHP?

+0

thể trùng lặp của [Buộc để tải về một tập tin sử dụng PHP] (http://stackoverflow.com/questions/1465573/forcing-to-download-a-file-using-php) – bummi

Trả lời

35

Bạn có thể thử một cái gì đó như thế này:

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

tôi chỉ thử nghiệm nó và nó làm việc cho tôi.

Xin lưu ý rằng đối với readfile để có thể đọc url từ xa, bạn cần bật số fopen_wrappers của mình.

+0

Chỉ cần nhớ đi: str_replace ('"', '\\"', $ file_name) Trước khi đặt tiêu đề –

+5

Lỗ hổng này là tất cả video sẽ chạy qua máy chủ của anh ấy. Nếu video nằm trên một máy chủ riêng biệt vì lý do băng thông, giải pháp này sẽ không được chấp nhận. – Zoredache

+0

Điểm chụp. Tuy nhiên, từ âm thanh của câu hỏi, tôi có ấn tượng rằng anh ta không có quyền truy cập vào máy chủ từ xa này, nếu không nó sẽ là một vấn đề tầm thường. Nếu đó là trường hợp, theo như tôi biết đây sẽ là giải pháp duy nhất. –

0

Hãy thử điều này:

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

Điều quan trọng là header(). Bạn cần phải gửi tiêu đề cùng với tải xuống và nó sẽ buộc hộp thoại "Lưu tệp" trong trình duyệt của người dùng.

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

sử dụng mã này. là nó có thể lưu tên tập tin vào những gì bạn muốn. ví dụ bạn có url: http://remoteserver.com/file.mp3 thay vì "file.mp3" bạn có thể sử dụng kịch bản này để tải về các tập tin như "newname.mp3"

5

Tested tập tin download.php là

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

và liên kết để tải là

<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

Vui lòng cung cấp mô tả chi tiết hơn về giải pháp của bạn. – clemens

Các vấn đề liên quan