2012-02-13 2 views
2

Je trouve ce grand script pour télécharger et protéger les fichiers d'un répertoire:Comment puis-je ajouter une limite de vitesse de téléchargement à ce script PHP?

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

Et je vis ce code à partir d'un site web aussi:

// 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!'); 
} 

Comment puis-je les combiner? Je veux dire comment puis-je utiliser le script getfile et y ajouter un taux de téléchargement?

J'ai essayé d'ajouter:

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

Mais au lieu de fichier $ je pense qu'il devrait être fd $ et j'ai eu aucun résultat positif

Qu'est-ce que je fais mal?

+0

Pourquoi ne pas simplement utiliser le script qui vous a été donné et ne rien changer à part le fichier? Ce que vous avez copié ci-dessus, ci-dessous la solution réelle n'ouvre même pas le fichier, ni envoyer les en-têtes, etc etc – MrJ

+0

Lequel, le Getfile ou celui que j'ai trouvé dans Google? Pour moi, tous les deux semblent bien fonctionner mais j'aimerais ajouter la fread d'impression ($ file, round ($ download_rate * 1024)); fonction à la http://www.gowondesigns.com/?page.getfile –

Répondre

1

Sur la base de votre commentaire - Je suppose que vous voulez les éléments suivants:

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

Il est à noter, cependant, qu'il est le tout script qui le fera invite avec succès à un utilisateur de télécharger le fichier et la limite de vitesse il. Il vous suffit de renommer le premier script de votre question sous le nom download.php, puis de le lier comme <a href='download.php?id=1'>Download 1</a> (l'ID de fichier 1 sera alors téléchargé).

<?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

En fait ce que je voulais est d'ajouter le download_rate au script Getfile ici http://www.gowondesigns.com/?page.getfile, mais de toute façon il était très utile. –

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

i utiliser. Et pas de problème.

Questions connexes