RUNps Posted December 7, 2011 Share Posted December 7, 2011 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. Si vous avez une piste, un début d'explication, voire une solution, je suis preneur. Merci Link to comment Share on other sites More sharing options...
RUNps Posted December 7, 2011 Author Share Posted December 7, 2011 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now