Jump to content

[Résolu] Téléchargement de fichiers dans la gestion de module


Recommended Posts

Bonjour à tous

 

Je rencontre un problème assez surprenant, inexplicable.

Je tente de créer un module permettant de générer des fichiers CSV, mais aussi de les télécharger.

 

Pour le moment je pose comme contrainte de gérer cela dans le module (pas de fichier ailleurs que dans le module), donc le module est "configurable", et tout ce passe coté BO une fois avoir cliqué sur le lien "configuration" (AdminModule).

 

J'ai ce morceau de code :

header('Content-Transfer-Encoding: binary');
header('Content-Type: application/octet-stream');
header('Content-Length: '.filesize($this->_dirCsv.$filename));
header('Content-Disposition: attachment; filename="truc.csv"');
//ob_end_flush();

$fp = fopen($filename, 'rb');
if ($fp) {
while (($buffer = fgets($fp, 4096)) !== FALSE) {
	echo $buffer;
	$line++;
}
if (!feof($fp)) echo "Erreur: fgets() a échoué<br />";
fclose($fp);
}
exit();

Le problème, c'est que le fichier à télécharger est bien renvoyé, mais le contenu obtenu est :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/

 

Or, le contenu du fichier n'a rien avoir avec du HTML (ci-dessus), mais du contenu type CSV, du genre :

champ1;champ2

valeur1;valeur2

 

 

Si je supprime (ou met en commentaire) les entêtes, les 4 header(), cette fois je n'obtiens pas de fichier à télécharger, mais le contenu est affiché, mais cette fois il correspond bien au contenu du fichier existant (du CSV).

Je souhaite cependant que ce contenu soit dans un fichier à télécharger.

 

Donc il y a à mon sens :

- soit un problème au niveau des entêtes

- soit un problème au niveau du buffer (ob_start - ob_end_flush). Le contenu serait vidé (perdu), puis après PS se chargerait de rajouter au minimum une entête HTML. Mais où ? Quand ?

Pure hypothèse cependant.

 

Je bloc totalement, j'ai essayé un peu tout et n'importe quoi sans avancer d'un yota. :huh:

 

 

Si vous avez une piste, un début d'explication, voire une solution, je suis preneur.

Merci ;)

Link to comment
Share on other sites

Bon, et bien j'ai compris grosso modo le pourquoi du comment. ^_^

 

Le lien du formulaire pour télécharger le fichier pointait vers le BO, comme :

index.php?tab=AdminModule&token=...etc...

 

Le problème, c'est que lorsqu'on appel le index.php du BO, dès le début ça inclus le header.inc.php, etc ... et surtout ça vide la sortie standard (ob_clean).

 

Dans mon cas il ne faut pas pointer vers le index.php.

Il y a bien dans le BO le fichier ajax-tab.php et ajax.php, mais c'est pour de l'Ajax, et je ne pas sur quoi d'autre m'appuyer.

 

C'est là que ça m'embête car je ne souhaitais pas créer un autre fichier.

J'ai quand fait un essai histoire de tester. En me basant sur le ajax.php, ça marche très bien.

 

 

Et bien on va dire que c'est résolu, car je doute d'avoir d'autres choix que de procéder ainsi.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...