2012-02-13 77 views
2

我發現這個偉大的腳本從目錄中下載和保護文件:如何爲此php腳本添加下載速度限制?

http://www.gowondesigns.com/?page.getfile

我看到這個代碼從一個網站太:

// local file that should be send to the client 
$local_file = 'test-file.zip'; 

// filename that the user gets as default 
$download_file = 'your-download-name.zip'; 

// set the download rate limit (=> 20,5 kb/s) 
$download_rate = 20.5; 

if(file_exists($local_file) && is_file($local_file)) { 


// send headers 
header('Cache-control: private'); 
header('Content-Type: application/octet-stream'); 
header('Content-Length: '.filesize($local_file)); 
header('Content-Disposition: filename='.$download_file); 

// flush content 
flush(); 

// open file stream 
$file = fopen($local_file, "r"); 

while (!feof($file)) { 

    // send the current file part to the browser 
    print fread($file, round($download_rate * 1024)); 

    // flush the content to the browser 
    flush(); 

    // sleep one second 
    sleep(1); 
} 

// close file stream 
fclose($file); 


} 
else { 
    die('Error: The file '.$local_file.' does not exist!'); 
} 

我怎樣才能將它們組合起來?我的意思是我如何使用getfile腳本併爲其添加下載速率?

我嘗試添加:

while (!feof($file)) { 

    // send the current file part to the browser 
    print fread($file, round($download_rate * 1024)); 

    // flush the content to the browser 
    flush(); 

    // sleep one second 
    sleep(1); 
} 

但不是$文件,我想應該是$ fd和我沒有任何積極的結果

我在做什麼錯?

+0

爲什麼不只是使用您提供的腳本,除文件外不更改任何內容?你在上面複製了什麼,在實際的解決方案下面甚至沒有打開文件,也沒有發送頭文件等等。 – MrJ 2012-02-13 08:15:28

+0

哪一個,Getfile是我在Google找到的?對我來說,他們都似乎工作正常,但我想添加打印fread($ file,round($ download_rate * 1024));函數到http://www.gowondesigns.com/?page.getfile – 2012-02-14 00:16:14

回答

1

基於您的評論 - 我想,你希望以下內容:

// open file stream 
$file = fopen($local_file, "r"); 

while (!feof($file)) { 

    // send the current file part to the browser 
    print fread($file, round($download_rate * 1024)); 

    // flush the content to the browser 
    flush(); 

    // sleep one second 
    sleep(1); 
} 

// close file stream 
fclose($file); 

你必須留意的是,它是整個腳本,這將使它成功地提示用戶下載該文件並限速它。只需將您的問題中的第一個腳本重命名爲download.php,然後將其鏈接爲<a href='download.php?id=1'>Download 1</a>(然後將文件ID 1下載)。

<?php 

$file_id = $_GET['id']; 

if($file_id == 1){ 
    // local file that should be send to the client 
    $local_file = 'test-file.zip'; 
    // filename that the user gets as default 
    $download_file = 'your-download-name.zip'; 
} else { 
    die('Invalid file selected for download'); 
} 

// set the download rate limit (=> 20,5 kb/s) 
$download_rate = 20.5; 

if(file_exists($local_file) && is_file($local_file)) { 
    // send headers 
    header('Cache-control: private'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Length: '.filesize($local_file)); 
    header('Content-Disposition: filename='.$download_file); 

    // flush content 
    flush(); 

    // open file stream 
    $file = fopen($local_file, "r"); 

    while (!feof($file)) { 
     // send the current file part to the browser 
     print fread($file, round($download_rate * 1024)); 

     // flush the content to the browser 
     flush(); 

     // sleep one second 
     sleep(1); 
    } 

    // close file stream 
    fclose($file); 
} else { 
    die('Error: The file '.$local_file.' does not exist!'); 
} 
?> 
+0

其實我想要的是將download_rate添加到Getfile腳本,在這裏http://www.gowondesigns.com/?page.getfile,但無論如何它是非常有幫助的。 – 2012-02-15 12:25:55

0
<?php 

$file = @$_GET["file"]; 

$rate = 100; // kb/sn 

if (!file_exists($file)) {die("File Not Found");} 

header("Content-Disposition: attachment; filename=" . $file);  
header("Content-Type: application/force-download"); 
header("Content-Type: application/octet-stream"); 
header("Content-Type: application/download"); 
header("Content-Description: File Transfer");    
header("Content-Length: " . filesize($file)); 
flush(); // this doesn't really matter. 

$fp = fopen($file, "r"); 
while (!feof($fp)) 
{ 
    echo fread($fp, $rate * 1024); 
    flush(); 
    sleep(1); 
} 
fclose($fp); 
?> 

我用這個。並沒有問題。