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 15/09/2011, 17h17   #1
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 99
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 99
Points : 39
Points : 39
Envoyer un message via MSN à ryu20
Par défaut création d'un fichier CSV et téléchargement

Bonjour,
Voici mon problème :
J'essaie de créer un fichier .CSV et de forcer le téléchargement pour l'utilisateur.
Pour le moment, la partie CSV est réussi puisque je peux créer un fichier lisible et avec les bonnes données aux bons formats.
Mon soucis, c'est qu'au moment de l'envoyer à l'utilisateur, le fichier proposé ne contient pas du tout ce que je veux. En effet, mon fichier est rempli avec le code source de ma page.

voici mon code :
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
	private function fichierCSV($contenu)
	{
		// On crée un fichier dans lequel on va stocker nos données
		$fp = fopen('./file.csv', 'w');
		//On initialise les deux première lignes avec un Titre et les colonnes séléctionnées
		fputcsv($fp, array(0=>$contenu[0][0]['name']),';');
		fputcsv($fp, array_keys($resultats[0][0]), ';'); 
		// Pour chaque lignes retournées, on ajoute le contenu de chaque colonne
		foreach ($resultats as $fields) 
		{
    		fputcsv($fp, $fields[0], ';');
		}
		// On ferme le fichier
		fclose($fp);
		$file = './file.csv';
	    header('Content-Description: File Transfer');
	    header('Content-Type: application/csv');
	    header('Content-Disposition: attachment; filename='.basename($file));
	    header('Content-Transfer-Encoding: binary');
	    header('Expires: 0');
	    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
	    header('Pragma: public');
	    header('Content-Length: ' . filesize($file));
	    ob_clean();
	    flush();
		readfile(basename($fp));
		exit;
		//$this->redirect('./file.csv');
	}
Le fonctionnement est le suivant, je laisse l'utilisateur choisir une action. A ce moment, je recharge ma page en y incluant le code ci dessus (un gentil petit if() )
du coup, quand la page se recharge, j'ai bien un fichier qui demande à être telecharger, avec le bon nom et tout. Mais il ne s'agit que du code HTML de la page.

Est ce que quelqu'un aurait une petite idée du pourquoi du comment?

Merci
ryu20 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 21h44   #2
Modérateur
 
Avatar de Vil'Coyote
 
Développeur Web
Inscription : février 2008
Messages : 3 307
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : février 2008
Messages : 3 307
Points : 4 488
Points : 4 488
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 
$fichier = "file.csv";
$chemin="./file.csv";
 
header('Content-disposition: attachment; filename="' . $fichier . '"');
header('Content-Type: application/force-download');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '. filesize($chemin));
header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
readfile($chemin);
Vil'Coyote est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/09/2011, 08h51   #3
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 99
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 99
Points : 39
Points : 39
Envoyer un message via MSN à ryu20
Merci, ta solution fonctionne.
Par contre, je ne comprends pas vraiment pourquoi?
C'est quoi la différence avec moi? (désolé, je suis encore débutant en php).
ryu20 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h40.


 
 
 
 
Partenaires

Hébergement Web