Télécharger plusieurs fichiers en 1 clic

Contenu du snippet

Voila une petite astuce pour lancer le téléchargement de plusieurs fichiers à la fois.
Ça tiens en 2 pages :
- start.php est la page sur laquelle doit pointer le lien lançant le téléchargement. Elle est a un double système de rafraîchissement : par une entête HTTP qui pointe vers la seconde page. Et par un javascript qui la met à jour.

- sender.php est la page envoyant les fichiers, un par appel qui lui est fait.
une liste de nom et une variable de session permettent de définir quel fichier est envoyé.

Source / Exemple :


/** start.php **/
<?php
	session_start();
	if (! session_is_registered('n'))
		$_SESSION['n'] = 0;

	if ($_SESSION['n'] < 3){
		header ('Refresh: 0, url="sender.php"');
?>
<html>
  <head>
    <script>
	setTimeout(function(){location.reload();},500);
    </script>
    <title></title>
  </head>
  <body>
   Proposition de transfert en cours...
  </body>
</html>
<?php
		exit;
	}else{
		session_unregister('n');
?>

<?php
	}
?>

<html>
  <head>
    <title></title>
  </head>
  <body>
    Proposition Terminée.
  </body>
</html>

/** sender.php **/
<?php
	session_start();
	if (! session_is_registered('n'))
		$_SESSION['n'] = 0;
	
	$files = array('test.txt','machin.txt','truc.txt');
	$file = $files[$_SESSION['n']];
	
	$sources = array('test.txt','test.txt','test.txt');
	$source = $sources[$_SESSION['n']];
	
	$_SESSION['n'] ++;
	
	header('Content-Disposition: attachment; filename="'.$file.'"');
	readfile($source);
?>

Conclusion :


Je n'ai testé ce script que sous FireFox.
Il est facile de l'améliorer, par exemple pour passer la liste de fichier en argument.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.