Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/01/2008, 13h59   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 11
Points : 11
Par défaut [CSV] Proposer le téléchargement d'un fichier

Bonjour,

J'ai essayé le code indiqué dans la FAQ, mais j'ai du mal l'essayer car mon fichier .csv apparait directement dans ma page en texte et je n'ai pas la boite de dialogue de téléchargement.
http://php.developpez.com/faq/?page=..._forcedownload

J'ai du coup repris un vieux fichier qui lui fonctionnait et qui ne me semblait pas bien différent.

Alors je ne sais pas trop ...
j'ai utilisé votre code en le mettant dans une fonction que j'appelle depuis la page où je génère mon fichier en passant son nom en paramètre.

Par contre, le fichier que j'utilise, lui, contient ça au début :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php 
 
// on essaie de reconnaitre l'extension pour que le téléchargement corresponde au type de fichier afin d'éviter les erreurs de corruptions 
 
$fich=$_REQUEST["Fichier_a_telecharger"];
$chem=$_REQUEST["chemin"];
switch(strrchr(basename($_REQUEST["Fichier_a_telecharger"]), ".")){
 
case ".gz": $type = "application/x-gzip"; break;
case ".tgz": $type = "application/x-gzip"; break;
case ".zip": $type = "application/zip"; break;
case ".pdf": $type = "application/pdf"; break;
case ".png": $type = "image/png"; break;
case ".gif": $type = "image/gif"; break;
case ".jpg": $type = "image/jpeg"; break;
case ".txt": $type = "text/plain"; break;
case ".htm": $type = "text/html"; break;
case ".html": $type = "text/html"; break;
case ".txt": $type = "text/html"; break;
default: $type = "application/octet-stream"; break;
 
}
 
header("Content-disposition: attachment; filename=$fich"); 
header("Content-Type: application/force-download"); 
header("Content-Transfer-Encoding: $type\n"); // Surtout ne pas enlever le \n
header("Content-Length: ".filesize($chem . $fich)); 
header("Pragma: no-cache"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
header("Expires: 0"); 
readfile($chem . $fich); 
?>
et ensuite c'est de l'html classique et sans contenu sauf le titre

et il est appelé par un lien du style
Code :
<a href="telecharge.php?Fichier_a_telecharger=nomFichier"&chemin=nomDossier
Peut-être est-ce ce qu'il fallait faire aussi avec votre code, mais, en ce cas, peut-être faudrait-il l'indiquer en haut de votre FAQ, car ce n'est pas évident alors.

Voilà, si ça peut vous servir ...
virgrennes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 16h39   #2
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut virgrennes

Je me permets de te faire remarquer que ton exemple crée la variable $type mais qu'il ne l'utilise pas. Le "switch" ne sert donc à rien. En outre, tu ne protèges pas tes variables dans $_REQUEST, ce qui rend ton script vulnérable à la dangereuse faille d'injection de headers.

Puisque ton exemple et celui de la FAQ utilisent essentiellement la même technique, je te recommande d'utiliser la version de la FAQ, qui est sécurisée.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 09h31   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 11
Points : 11
Bonjour,
pour la variable $type, elle est utilisée :
Code :
header("Content-Transfer-Encoding: $type\n");
mal, je vous l'accorde, mais elle l'est
la correction devrait être :
Code :
header("Content-Transfer-Encoding: ".$type."\n");
pour la protection des variables, je me renseignerai car je ne vois pas de quoi il en retourne... A moins que vous ayez le temps de m'éclairer...

Enfin, pour mon post, je crois que comme d'habitude, j'ai voulu trop en dire et n'ai pas été claire du tout, j'ai l'habitude

J'ai déjà testé la FAQ en mettant le code indiqué dans le mien, mais ça ne fonctionne pas, ou du moins, ça n'ouvre pas la fenêtre de téléchargement, ça affiche simplement le contenu de mon fichier dans ma page.

Donc, ce que je voulais dire c'est que, si il faut mettre le code de la FAQ dans un autre fichier qu'il faut appeler avec un onclick ou href, ce serait peut-être intéressant de l'expliquer et si il y a une autre manière de l'utiliser, alors peut-être l'indiquer aussi.

merci de votre réponse en tout cas, je vais regarder à mes variables
virgrennes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 09h59   #4
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Au temps pour moi, je n'avais pas vu pour la variable. Elle n'est pas mal utilisée, c'est moi qui ne l'avais pas vue.
Ton commentaire "Surtout ne pas enlever le \n" m'étonne, car habituellement un \n supplémentaire termine le bloc des headers et marque le début du document. Dans ton cas, le document commencerait donc à "Content-Length"

Peux-tu m'en dire davantage sur ton utilisation ? Quel navigateur as-tu esssayé, dans quelle version ? Peux-tu m'indiquer un lien pour essayer par moi-même, éventuellement en fournissant le code PHP exact ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 11h08   #5
Candidat au titre de Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 11
Points : 11
Alors déjà, j'avoue tout, ce code n'est pas complètement de moi, j'en ai découvert le système en 2002, mais je ne me souviens pas de qui en a la paternité (ou maternité, arrêtons un peu ce sexisme )
Donc pour le \n, je ne me souviens plus, mais j'ai du tester avec et sans à l'époque, car ce commentaire vient de moi, mais pourquoi, je vais reessayer

Pour ce qui est de son fonctionnement, je vais t'en donner un exemple :

http://kalifrance.com/download.php

tu cliques sur n'importe quel produit et tu verras ce qui se passe.

Pour la méthodologie du truc :

dans la page simplement appeler le fichier téléchargement dans le a href en passant le nom du fichier et le chemin en paramètre (évidement, pour ce qui est de la protection des données, c'est moyen vu que c'est du GET et non du POST)

Et ensuite le fichier telechrg.php contient le code cité plus haut puis une structure html-head-body classique vide (je peux te l'envoyer en mail si tu veux)
donc rien de bien compliqué

et à quoi il me sert dans mon nouveau site, à permettre le téléchargement d'un fichier csv issu d'une liste de contact récupérée à chaque fois que les gens déposent un message sur mon site.
le problème, c'est que je voudrais ne pas avoir à créer le fichier csv dans ce fichier de téléchargement, pour qu'il reste le plus généraliste possible et qu'il me serve partout dans mon site et ne soit pas plein de fonctions qui n'ont rien à voir avoir avec son action première.

donc il me faut
- cliquer sur export
- lancer un script qui génère le csv (ou autre)
- quand le script de génération est finit, lancer ce fichier comme avec un href

est-ce que tu as toutes les billes?

en tout cas, c'est gentil d'y réfléchir avec moi, merci
virgrennes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 11h14   #6
Candidat au titre de Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 11
Points : 11
effectivement, le \n ne semble rien changer...

juste comme ça, il a l'air joli ton avatar? c'est toi qui l'a dessiné?
virgrennes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 11h35   #7
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Je te remercie mais, en fait, j'arrive très bien à faire fonctionner le script. Et je sais à quoi doit ressembler un script qui fonctionne, ce n'est pas cela qu'il me faut mais plutôt un exemple qui ne fonctionne pas (et le source associé, si possible).

Au sujet de la sécurité, ce n'est pas GET ou POST le problème, puisqu'il est tout autant possible de forger une requête GET que POST. En fait, c'est simplement que tu donnes un chemin d'accès et un nom de fichier. Que se passe-t-il si je modifie le paramètre à un script existant sur ton site, ou pire si je donne le nom de ton script de config (à supposer que je parvienne à le deviner) ?
Tu devrais enlever ce sript immédiatement, et mettre en place une BDD : indique l'ID numérique du fichier en paramètre, et utilise-le côté serveur pour déterminer le fichier à télécharger. C'est la meilleure approche.

[Edit] Merci
Non, je n'ai aucun talent de graphisme, on me l'a fait à une convention il y a quelques années.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 11h52   #8
Candidat au titre de Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 11
Points : 11
pour l'id, ça va être plus contraignant qu'autre chose,car j'ai un seul fichier qui est généré à la volée quand on clique sur le bouton export dans mon admin.
donc mettre en place une table pour ça ...
mais pourquoi pas
sinon, justement, je voudrais pouvoir le faire côté serveur directement après la génération de mon fichier, mais je ne sais pas comment en php, est-ce qu'il y a un truc équivalent aux createobject etc. de asp, surement en "flux"

mais comme je n'y connais rien en flux, je n'ai aps encore osé m'y aventurer de peur de chercher pendant 15j dnas la mauvaise direction sans le savoir vu que je n'y connais rien.

Sinon, pour un script qui ne marche pas... Je ne comprends pas trop alros je vais te donner ce que j'ai fait avec le code de la FAQ la première fois que je l'ai utilisé :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
<? 	
			//pour l'export
            if(isset($_REQUEST["coch"])){
                $fic = fopen("./temp/tempAdrCsv.csv","w+");
                fputs($fic,"Prénom;Nom;Nom complet;Adresse de messagerie;Téléphone professionnel\r\n");
                $tabMail = $_REQUEST["coch"];
                $nbMail = count($tabMail);
                for($i=0;$i<$nbMail;$i++){
                    $req = "SELECT * FROM t_con_exp WHERE int_idExp = " . $tabMail[$i];
                    $res = mysql_query($req);
                    $row = mysql_fetch_array($res);
                    $prenom = $row[2];
                    $nom = $row[1];
                    $nomComplet = $prenom ." ". $nom;
                    $mail = $row[3];
                    $tel = $row[4];
                    $lign = $prenom .";". $nom .";". $nomComplet .";". $mail .";". $tel ."\r\n";
                    fputs($fic,$lign);
                }
                fclose($fic);
 
				// on essaie de reconnaitre l'extension pour que le téléchargement corresponde au type de fichier afin d'éviter les erreurs de corruptions 
 
// Constantes de configuration
//
 
define('CFG_SYSTEM_FILENAME', './temp/tempAdrCsv.csv'); // Nom du fichier pour le système
define('CFG_SEND_FILENAME', CFG_SYSTEM_FILENAME); // Nom du ficher pour le navigateur
 
//
// Constantes à ne pas modifier
//
define('CFG_FILESIZE', filesize(CFG_SYSTEM_FILENAME));
define('CFG_FILE_MD5', md5_file(CFG_SYSTEM_FILENAME));
define('CFG_DATE_FORMAT', 'D, d M Y H:i:s');
 
//
// Quelques éléments nécessaires
//
error_reporting(0);
ini_set('zlib.output_compression', 0);
 
 
/*
* Les en têtes nécessaires
*/
 
//
// Gestion du cache
//
header('Pragma: public');
header('Last-Modified: '.gmdate(CFG_DATE_FORMAT).' GMT');
header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
 
//
// Informations sur le contenu à envoyer
//
header('Content-Tranfer-Encoding: none');
header('Content-Length: '.CFG_FILESIZE);
header('Content-MD5: '.base64_encode(CFG_FILE_MD5));
header('Content-Type: application/octetstream; name="'.CFG_SEND_FILENAME.'"');
header('Content-Disposition: attachement; filename="'.CFG_SEND_FILENAME.'"');
 
//
// Informations sur la réponse HTTP elle-même
//
header('Date: '.gmdate(CFG_DATE_FORMAT, time()).' GMT');
header('Expires: '.gmdate(CFG_DATE_FORMAT, time()+1).' GMT');
header('Last-Modified: '.gmdate(CFG_DATE_FORMAT, time()).' GMT');
 
 
/*
* Envoi du fichier
*/
 
readfile(CFG_SYSTEM_FILENAME);
        		//ici faire lancer fichier pour téléchargement quand je trouve comment faire ...
            }
 
        ?>
tu mets le tout dans le fichier qui contient le formulaire listant les contacts en question et qui ont chacun une case à cocher pour savoir lesquels on exporte
et là, le readfile fait exactement ce qu'on lui demande, il envoi à la sortie standard son contenu => donc le texte de mon csv apparait dan sma page au lieu de lancer une fenêtre de téléchargement...

voilà ce qui n'allait pas
virgrennes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 12h07   #9
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
C'st bien ce que je te dis, cela fonctionne pour moi (FF2 et IE7). Quel navigateur utilises-tu ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 12h12   #10
Candidat au titre de Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 11
Points : 11
FF2 et IE7 aussi sinon, je suis sur Vista...

je teste ton test...
virgrennes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 12h18   #11
Candidat au titre de Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 11
Points : 11
pas moi, mais je crois savoir pourquoi :
dans le ficheir csv.php, il n'y a rien derrière ...
alors que moi c'est du php dans plein d'html (un formulaire, une charte etc..)

ou alors je deviens folle, je vais aller manger, ça me remettra le cerveau à l'endroit
bon app si tu manges aussi
virgrennes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 14h34   #12
Candidat au titre de Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 11
Points : 11
bon, je laisse tomber, je vais chercher un moyen de lancer un fichier côté serveur et voilà.

Merci quand mm du coup de main

et bon courage pour la suite
virgrennes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 14h41   #13
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Si tu veux forcer le téléchargement d'un fichier, il ne faut rien envoyer après readfile()
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 15h16   #14
Candidat au titre de Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 11
Points : 11
je sais c'est pour ça que ça ne va pas sur mon système

imagines :
tu vas sur l'admin : authentification+ un clic pour se connecter
ensuite tu vas sur la page des contacts (un clic dans le menu)
ensuite tu cliques sur les cases des contacts à exporter (ou sur "tout cocher")
ensuite tu cliques sur "export"
et là il faudrait encore cliquer sur un lien pour télécharger le fichier ...

non, ça fait un clic de trop ...

non, clairement il faut que la fenêtre se lance quand on clique sur "export", mais comme il faut savoir quelle liste est à exporter (form), il faut forcément, soumettre le formulaire avant ...
donc pouvoir lancer le téléchargement dans la foulée de manière transparente...

y'a plein de gens qui le font, pourquoi moi je n'y arrive pas ...
virgrennes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 18h03   #15
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
à place du "readfile", il suffit que tu fasses un "echo" du contenu du fichier que tu veux proposer en téléchargement, tu n'es pas obligé de créer un fichier temporaire sur le serveur
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 23h32   #16
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Tu as un if, il te suffit de mettre le formulaire dans le else
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 09h23   #17
Candidat au titre de Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 11
Points : 11
Bonjour,

pour Mathieu :
euh.. mais si je fais un echo du contenu du fichier, c'est qu'il y a un fichier, et si je ne le génère pas, comment est-ce que j'aurai un fichier dont je pourrai afficher le contenu?

c'est pas grave...
Tu voulais surement dire autre chose, mais comme le réveil est difficile je ne comprends pas

pour Yogui :
et comment je fais pour tjs voir mon formulaire pendant que je génère mon code et que je lance le téléchargement si je le mets dans le else?
Sinon, je ferais une page de traitement en plus et ce serait baclé.
Le but du jeu c'est que ce soit simple fonctionnel et avec le minimum de clic pour l'utilisateur... Donc forcément compliqué pour moi

je te montre la tête de mon admin que tu te rendes compte en pièce jointe
tu verras que ce serait très nul d'enlever le formulaire ...

mais c'est pas possible de faire un code du style ? :

blablabla...
<body>
blablabla...
<?
if(j'ai cliqué sur export et j'ai des cases cochées){
//chercher les mails en fonction des contacts
//les lister avec nom prénom etc.
//mettre tout ça en forme dans une variable
//charger le tout dans un fichier
//lancer telechrg.php pour que mon client récupère son fichier et puisse l'importer dans son client de messagerie préféré?
=> genre : run("telechrg.php?fichier=test.csv&chemin=./chem/");
}
Images attachées
Type de fichier : jpg ex-admin.jpg (118,6 Ko, 4 affichages)
virgrennes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 10h00   #18
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
le code du script qui est appelé quand tu cliques sur "export" ressemble à ça :
Code PHP :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// construction du contenu du fichier
$resultat = "Prénom;Nom;Nom complet;Adresse de messagerie;Téléphone professionnel\r\n";
 
$tabMail = $_REQUEST["coch"];
$nbMail = count($tabMail);
for($i=0;$i<$nbMail;$i++){
    $req = "SELECT * FROM t_con_exp WHERE int_idExp = " . $tabMail[$i];
    $res = mysql_query($req);
    $row = mysql_fetch_array($res);
    $prenom = $row[2];
    $nom = $row[1];
    $nomComplet = $prenom ." ". $nom;
    $mail = $row[3];
    $tel = $row[4];
 
    $resultat .= $prenom .";". $nom .";". $nomComplet .";". $mail .";". $tel ."\r\n";
}
 
// envoi des entêtes
...
 
// envoi du contenu
echo $resultat;
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 10h14   #19
Candidat au titre de Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 11
Points : 11
résultat : le contenu de mon fichier apparait dans ma page et je n'ai pas de proposition de téléchargement.

le code mis en oeuvre :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
//pour l'export
            if(isset($_REQUEST["coch"])&&isset($_REQUEST["action"])&&strcmp($_REQUEST["action"],"ex")==0){
                //$fic = fopen("./temp/tempAdrCsv.csv","w+");
                //fputs($fic,"Prénom;Nom;Nom complet;Adresse de messagerie;Téléphone professionnel\r\n");
				$lign = "Prénom;Nom;Nom complet;Adresse de messagerie;Téléphone professionnel\r\n";
                $tabMail = $_REQUEST["coch"];
                $nbMail = count($tabMail);
                for($i=0;$i<$nbMail;$i++){
                    $req = "SELECT * FROM t_con_exp WHERE int_idExp = " . $tabMail[$i];
                    $res = mysql_query($req);
                    $row = mysql_fetch_array($res);
                    $prenom = $row[2];
                    $nom = $row[1];
                    $nomComplet = $prenom ." ". $nom;
                    $mail = $row[3];
                    $tel = $row[4];
                    $lign = $lign . $prenom .";". $nom .";". $nomComplet .";". $mail .";". $tel ."\r\n";
                    //fputs($fic,$lign);
                }
                //fclose($fic);
        		//ici faire lancer fichier pour téléchargement quand je trouve comment faire ...
 
				define('CFG_DATE_FORMAT', 'D, d M Y H:i:s');
				error_reporting(0);
				ini_set('zlib.output_compression', 0);
				header('Pragma: public');
				header('Last-Modified: '.gmdate(CFG_DATE_FORMAT).' GMT');
				header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
				header('Content-Tranfer-Encoding: none');
				header('Content-Type: application/octetstream; name=tempAdrCsv.csv');
				header('Content-Disposition: attachement; filename=tempAdrCsv.csv');
				header('Date: '.gmdate(CFG_DATE_FORMAT, time()).' GMT');
				header('Expires: '.gmdate(CFG_DATE_FORMAT, time()+1).' GMT');
				header('Last-Modified: '.gmdate(CFG_DATE_FORMAT, time()).' GMT');
				echo $lign;
            }
les erreurs potentielles : je me suis plantée dans les en-têtes...
ps : pas de fichier donc pas de
define('CFG_FILESIZE', filesize(CFG_SYSTEM_FILENAME));
define('CFG_FILE_MD5', md5_file(CFG_SYSTEM_FILENAME));
et pas de
header('Content-Length: '.CFG_FILESIZE);
header('Content-MD5: '.base64_encode(CFG_FILE_MD5));

on est d'accord?
ou bien faut-il mettre des valeurs fictives ... ?
virgrennes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 10h27   #20
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
La taille du fichier est en fait strlen()
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h46.


 
 
 
 
Partenaires

Hébergement Web