8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je suis à la recherche d'un peu d'aide afin de parfaire mon module de download :
J'utilise un procédé assez répandu (Cf SourceForge lui meme) pour permettre de télécharger un fichier tout en conservant ma page affichée : un iFrame.
Le principe est simple :

une page "display.php" qui affiche tout un blabla, peut importe
une page "download.php" qui ne fait qu'envoyer des entetes html via la fonction php header.

Dans ma page display.php, j'ai un iFrame qui a comme src la page download.php. Ainsi display.php affiche le texte et en meme temps, son iframe lance le download. L'utilisateur ne perd donc pas le fil de sa navigation.

Cela fonctionne sous IE, FF mais sous Opera l'iframe affiche un message propre à Opera disant que le contenu ne peut etre affiché et il propose un lien de téléchargement direct (qui est le src de l'iframe).
Auriez vous déjà réalisé quelque chose de similaire à ce que je souhaite faire ? à savoir : afficher une page et lancer un download en meme temps. Si oui, comment avez vous procédé ? (bien entendu, compatible tout navigateur)

L'exemple de sourceforge : affichez le source de la page suivante : http://sourceforge.net/project/downloading.php?group_id=14481&use_mirror=heanet&filename=7z464.exe&8213118 et faites une recherche du mot "iframe" dans ce source, vous verrez le principe que j'utilise. Le mien ne marche pas avec Opera mais celui de sourceforge oui, il doit me manquer quelque chose dans les headers mais je ne sais pas quoi.

Merci d'avance
@ bientot
Modifié par zax-tfh (23 Jan 2009 - 18:02)
Salut,

personnellement je me sers de ça (pour des .mp3 en l'occurrence) :
<?php
// Récupère l'id de la piste passée 
// Si non défini, remet  1
if (isset($_GET['piste'])) {
	$piste = intval($_GET['piste']);
	if ($piste < 1 || $piste > 3 ) {
		$piste = 1;
	}
} else {
	$piste = 1;
}
	
switch ($piste)
{	case 1 :
		$fichier = 'Morceau terrib.mp3';
		break;
	
	case 2 :
		$fichier = 'Morceau qui roxe.mp3';
		break;
	
	case 3 :
		$fichier = 'Morceau trop d la balle.mp3';
		break;
	
	default :
		$fichier = 'Morceau terrib.mp3';
		break;
}

// Extraction des informations grâce à $fichier
$fichier_nom = basename($fichier);
$fichier_taille = filesize($fichier);
$fichier_mime = 'audio/mpeg';
     
// Téléchargement du fichier
header("Content-disposition: attachment; filename=\"$fichier\"");
header("Content-Type: $fichier_mime");
header("Content-Transfer-Encoding: binary");
header("Content-Length: $fichier_taille");
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");
readfile($fichier);
?>

Modifié par Heyoan (22 Jan 2009 - 14:51)
Salut,

Merci pour ta réponse. Alors concernant les entetes, j'utilise les memes.
Par contre, ce qui m'interresse c'est de savoir comment tu te sers de ce script ?
Est-ce une simple balise a qui pointe vers ton script de download en passant un parametres ? Si oui, cela veut donc dire que ton visiteur lorsqu'il clique sur le lien, atterit sur une page blanche (+ la boite de dialogue enregistrer sous) ? Si c'est le cas, c'est ce que je cherche à fuir Smiley smile
Si tu utilises une autre méthode, cela m'interresse.

Merci
@ +
zax-tfh a écrit :

Par contre, ce qui m'interresse c'est de savoir comment tu te sers de ce script ?
Est-ce une simple balise a qui pointe vers ton script de download en passant un parametres ? Si oui, cela veut donc dire que ton visiteur lorsqu'il clique sur le lien, atterit sur une page blanche (+ la boite de dialogue enregistrer sous) ?
Oui : le visiteur clique sur un input image (mais ce serait pareil avec un simple lien puisque je passe l'id en get). Par contre je ne vois pas pourquoi il aurait une page blanche puisque rien n'est affiché. Smiley murf

Si tu veux voir c'est par ici (pour info ça devrait effectivement être un simple lien mais au tout début la gestion n'avait rien à voir et je passais des variables en hidden... et j'ai pas eu trop le temps de refaire ça bien Smiley lol ).

Euh d'ailleurs pour montrer qu'un simple lien ferait l'affaire : test download (<-- clic gauche).
Modifié par Heyoan (08 Aug 2010 - 00:34)
Pourquoi faire simple quand on peut faire compliqué ?
Effectivement, ça fonctionne super bien... Je ne sais pas pourquoi je m'etais mis en tete que le lien aurait dirigé vers la page et n'aurait pas laissé celle ou il y a le lien...
[auto flagele]Quel boulet....[/auto flagele]
zax-tfh a écrit :
Pourquoi faire simple quand on peut faire compliqué ?
Effectivement, ça fonctionne super bien... Je ne sais pas pourquoi je m'etais mis en tete que le lien aurait dirigé vers la page et n'aurait pas laissé celle ou il y a le lien...
[auto flagele]Quel boulet....[/auto flagele]
Je t'aide un peu si tu veux ! Smiley sm Smiley lol

Si tu considères que ce sujet est [Résolu] merci de l'indiquer en éditant ton premier post et en modifiant le titre. Smiley cligne