[php] démarrer un download automatiquement

Résolu/Fermé
wenijah Messages postés 72 Date d'inscription mercredi 20 juin 2007 Statut Membre Dernière intervention 26 janvier 2012 - 20 juil. 2007 à 15:34
wenijah Messages postés 72 Date d'inscription mercredi 20 juin 2007 Statut Membre Dernière intervention 26 janvier 2012 - 20 juil. 2007 à 16:05
Hello le forum!

J'ai un petit souci plutôt important pour la nature de mon site. Savez-vous comment faire pour faire démarrer un téléchargement automatiquement après clic sur un lien image? Sans utilisé les headers (je ne sais pas pourquoi ça ne fonctionne pas chez moi) !! Ou alors, m'expliquer pour quand j'utilisé les headers, en précisant application/octet-stream, le fichier s'ouvre comme un fichier texte et ne démarre pas en tant que download..!

Merci!

~W~
A voir également:

1 réponse

s.spark Messages postés 2480 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 617
20 juil. 2007 à 15:46
Salut,

La modification du header ne fonctionne pas si tu a affiché quelque chose avant (html, javascript ...), sinon ca ne s'appellerait pas comme ça ^^ (entête). On le répète très souvent au gens mais bizarrement c'est quelque chose qu'il ont du mal à intégrer.


Le mieux pour ne rien afficher avant c'est encore de créer un fichier rien que pour ça.

Tu crées par exemple un fichier fichier_a_telecharger.php et dedans tu mets :

$url = ('dossier/fichier_a_telecharger.txt');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'. basename($url) .'";');
@readfile($url) OR die();


Et tu fais pointer ton lien vers fichier_a_telecharger.php et ca provoquera le téléchargement de fichier_a_telecharger.txt.

Pour ne pas recréer ce fichier pour tous tes téléchargement utilise les variables POST( formulaire) ou GET. Comme ça :

$url = ('dossier/'.$_GET['telecharger']);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'. basename($url) .'";');
@readfile($url) OR die();


Et tu fais pointer ton lien sur :

fichier_pour_telecharger.php?telecharger=fichier_a_telecharger.txt


Attention à la sécurité de ton site, il ne faut pas que n'importe qui puisse télécharger le fichier qu'il veut comme ça, par exemple en faisant :

fichier_pour_telecharger.php?telecharger=index.php

Pour cela il te suffit d'imposer un dossier dans lequel tu télécharge et de ne rien mettre de critique dedans


$url = ('dossier_imposé/'.$_GET['telecharger']);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'. basename($url) .'";');
@readfile($url) OR die();



Tu peux même imposer une extension :

$url = ('dossier_imposé/'.$_GET['telecharger'].'.txt');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'. basename($url) .'";');
@readfile($url) OR die();


fichier_pour_telecharger.php?telecharger=fichier_a_telecharger
7
wenijah Messages postés 72 Date d'inscription mercredi 20 juin 2007 Statut Membre Dernière intervention 26 janvier 2012 6
20 juil. 2007 à 15:54
Merci le problème est que je ne PEUX pas utiliser les headers car j'ai besoin de récupérer certaines infos avant de lancer le téléchargement... Bizarrement aussi, en mettant les headers bien avant tout le reste (bien évidemment !?); l'erreur se perpétue... Je tourne sur serveur dédié, y'aurait-il une possibilité d'erreur à cause du serveur Apache?
0
s.spark Messages postés 2480 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 617 > wenijah Messages postés 72 Date d'inscription mercredi 20 juin 2007 Statut Membre Dernière intervention 26 janvier 2012
20 juil. 2007 à 15:58
Tu peux très bien récupérer toutes les info que tu veux, tu n'as pas compris l'histoire de créer un fichier dédié. Et puis tu peut très bien faite un simple teste pour savoir si la fonction header marche. Pour apache je ne peux pas t'aider je n'ai pas de dédié, et j'utilise easyphp.
0
wenijah Messages postés 72 Date d'inscription mercredi 20 juin 2007 Statut Membre Dernière intervention 26 janvier 2012 6 > s.spark Messages postés 2480 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018
20 juil. 2007 à 16:05
Merci, je vais tester tout ça et je repasserai par là!
0