jeudi 12 juillet 2012

Téléchargement d'un fichier en PHP

Ce ticket est très utile pour gérer les ventes en ligne des e-books en format pdf ou des fichiers audios. Le contrôle de téléchargement avec le PHP est très important quand la ressource hébergée est en dehors de la zone publique accessible par le serveur web. Seul le code PHP connaîtrait l'emplacement. Le nom sur le disque pourra aussi différer du nom qu'on voudra présenter à l'internaute.

un petit exemple pour des fichiers mp3 :

  1. // download.php  
  2. set_time_limit(0);  
  3.   
  4. $filePath = '/chemin_serveur/Track-01.mp3';  
  5. $newName = '01-Titre.mp3';  
  6.   
  7. header('Content-Type: audio/mpeg') 
  8. header('Content-Disposition: attachment; filename="' . $newName '";') 
  9. header('Content-Transfer-Encoding: binary') 
  10. header('Content-Length: ' . filesize($filePath) ) 
  11.   
  12. @readfile($filePathor die('Echec...');
  • Le content-disposition "attachment" indique au fureteur qu'il faudra faire afficher la fenêtre "Enregistrer sous" et proposera le nom indiqué dans la variable $newName.
  • La fonction filesize() s'assurera d'initialiser l'entête content-length à la taille réelle du fichier.
  • @readfile or die : on pourrait mieux controler la lecture du contenu du fichier, en vérifiant d'abord s'il existe avec la fonction file_exists().
  • En indiquant set_time_limit(0), on spécifie au serveur qu'il devra diffuser sans interruption. Ceci n'est pas recommandé, il est préférable d'indiquer un temps plus approprié.
Sur la page principale, un lien pourrait pointer vers le script de téléchargement mais il n'y aurait pas de redirection vers download.php car l'entête indique "attachment" pour son contenu.

<a href="download.php?track=1">Télécharger la première pièce</a>

Aucun commentaire:

Enregistrer un commentaire